触摸开始于UITableViewController

sum*_*HAY 8 cocoa-touch objective-c uitableview uiviewcontroller uiresponder

我在我的UITableViewController子类中定义了这个方法:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];
    NSLog(@"touch began");
}
Run Code Online (Sandbox Code Playgroud)

但它没有被触发.UIViewController是UIResponder的子类,所以它应该可以工作,对吧?谢谢

小智 5

如果你试图解雇UITableViewController中的键盘,一个不错的解决方案是在tableView委托的didSelectRowAtIndexPath方法中调用resignFirstResponder.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [myTextField resignFirstResponder];

    // Rest of your actual didSelectRowAtIndexPath code ...
}
Run Code Online (Sandbox Code Playgroud)


zpa*_*ack 4

是的,那绝对应该有效。

\n\n

确保为此控制器对应的视图设置“用户交互启用”。

\n\n

如果视图是从 nib/xib 加载的,请确保 File\'s Owner 设置为适当的类名,并且 File\'s Owner\'sview连接文件所有者的出口以正确查看视图。

\n\n

更新:我也看到了这种行为,使用使用基于导航的应用程序模板构建的应用程序,但使用基于视图的应用程序模板,它可以按预期工作。

\n\n

我认为在导航控制器的情况下,嵌入视图控制器中的表视图会在视图控制器之前获取事件。请参阅UIView 参考(重点是我的):

\n\n
\n

视图控制器本身是 UIResponder 类的后代,并被插入到托管根视图及其超级视图之间的响应者链中,该超级视图通常属于不同的视图控制器。如果视图控制器\xe2\x80\x99s视图不处理事件,\n 视图控制器本身可以选择在将事件传递给父视图之前\n 处理该事件。

\n
\n\n

这意味着视图有第一次机会处理该事件,如果确实如此,视图控制器将无法获取它。

\n\n

不太清楚你想要完成什么,所以我不确定要提供什么解决方案。

\n