【问题标题】:UIViewController subclass not receiving touchesBegan iphone ipadUIViewController 子类没有收到 touchesBegan iphone ipad
【发布时间】:2010-09-01 22:08:44
【问题描述】:

所以我将 UIViewController 子类化,在 nib 中我有一个 UIView,其中有一个 tableview。据我了解,UIViewController 和 UIView 都是 UIResponder 的子类,因此它们应该接收 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 方法。

但是,情况并非如此,我的视图控制器子类没有接收到该方法。如果可以的话,我真的不想继承 UIView。

我正在尝试实现this,但我的

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [textfield resignFirstResponder];
}

没有被调用。

【问题讨论】:

    标签: iphone ipad uiviewcontroller subclass touchesbegan


    【解决方案1】:

    这取决于您触摸的位置。如果您在表格视图中触摸,则触摸将发送到表格视图,而不是视图控制器。如果您触摸视图中的文本字段,则触摸将发送到 UITextField 本身。如果您在 tableview 之外、文本字段之外但在 viewcontrollers 的视图中触摸,则视图控制器应该得到这些触摸。

    【讨论】:

      【解决方案2】:

      如果您在 IB 中将 VC 的视图更改为 UIControl(UIControl 是 UIView 的超类),您可以为其分配 IBAction。您可以在该操作中让您的文本字段 resignFirstResponder 。

      【讨论】:

      • 一个 UIView is 一个 UIControl,不需要改变任何东西。您可以将操作分配给 UIView。
      • 没有子类化 UIView 是不可能的——这是张贴者不想要的。如果您将其更改为 UIControl,您可以访问事件,因此您可以在 IB 中将其设置为 touchDown 或 touchUpInside,而无需处理它的代码。我以前做过。 UIView 不列出触摸事件。
      【解决方案3】:

      不幸的是,touchesBegan 只发生在视图中,尽管 UIViewController 是 UIReponder 的子类。 touchesBegan 的文档是这样说的。

      当一根或多根手指在视图或窗口中触摸时通知接收器。

      【讨论】:

      • UIViewController 也支持 touchesBegan。我在我的一个应用程序中广泛使用它,以允许用户重新排列视图控制器中的视图。
      • UIViewController 确实参与了响应者链,因此会像 UIView 一样接收 touchesBegan。
      • UIViewController 在 iOS 3 及之后的版本中被插入到响应者链中。
      • developer.apple.com/library/ios/#DOCUMENTATION/EventHandling/… 命中测试视图或第一响应者将事件或消息传递给其视图控制器(如果有);如果视图没有视图控制器,它会将事件或消息传递给它的父视图。如果视图或其视图控制器无法处理事件或消息,则将其传递给视图的父视图。
      • 我很高兴看到这么多人对我糟糕的答案投了反对票。我显然是从那里的一些非常过时的知识中工作的。
      【解决方案4】:

      您所说的 UIView 是您创建的,还是使用 UIViewController 提供的? 此外,如果点击发生在 UITableView 上,您必须将其子类化以让您的 UIViewController 知道在 tableview 上发生了点击...

      【讨论】:

        猜你喜欢
        • 2012-06-03
        • 1970-01-01
        • 2016-01-20
        • 2016-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多