【问题标题】:Why should I implement all event-handling methods, while handling events in a subclass of UIView?为什么要实现所有事件处理方法,同时在 UIView 的子类中处理事件?
【发布时间】:2010-04-12 11:47:54
【问题描述】:

根据 iPhone 应用程序编程指南(事件处理章节),如果我使用 UIView 或 UIViewController,我应该实现所有事件处理方法(即使它是空实现)。而且我不应该调用这些方法的超类实现。

为什么? (我在 Guide 和 Google 中搜索过,但找不到答案……或者只是无法很好地搜索)

【问题讨论】:

    标签: iphone events event-handling


    【解决方案1】:

    来自guide

    这个准则的原因是 简单:处理的所有视图 接触,包括你自己的,期待 (或应该期望)收到完整的 触摸事件流。如果你阻止一个 UIKit 响应者对象从接收 触及某个阶段 事件,由此产生的行为可能是 未定义且可能不受欢迎。

    【讨论】:

    • 但是为什么不能对这些触摸进行默认(空)实现(只允许在假定的子类中实现必要的实现)?
    • 我不认为这是不可能的,但设计师可能决定他们不会实现 null 方法......或者添加触摸处理的团队可能无法访问原始 UIView代码(或不允许修改)。
    • 也许...非常感谢您的回答和评论。
    【解决方案2】:

    视图中有很多东西是由用户决定运行时间的……由它的委托方法……如果没有定义,你的应用程序可能会崩溃……

    例如,如果您有一个应用程序并且您在其中使用 UITableView 并且如果您没有实现

    tableView:cellForRowAtIndexPath:
    

    它不会给您任何错误...但是当您运行应用程序以及包含 Tableview 的视图加载应用程序时,应用程序将崩溃 你会得到

    * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UITableView 数据源必须从 tableView:cellForRowAtIndexPath: 返回一个单元格:”

    因为应用程序不知道如何显示表格的单元格...

    因此,UIView 和 UIViewController 的情况也是如此...如果未实现特定的委托方法,您的应用程序可能会在某些事件上崩溃(可能不是...)

    【讨论】:

      猜你喜欢
      • 2013-04-28
      • 1970-01-01
      • 2016-09-06
      • 2016-03-03
      • 2017-12-02
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 2018-09-06
      相关资源
      最近更新 更多