点击UITableView时resignFirstResponder?
Posted
技术标签:
【中文标题】点击UITableView时resignFirstResponder?【英文标题】:resignFirstResponder when tapping UITableView? 【发布时间】:2009-10-19 23:41:13 【问题描述】:我有一个带有两个自定义单元格的UITableView
,每个单元格都有一个子视图,里面有一个UITextField
。我尝试在UITableView
上添加UIButton
并拥有resignFirstResponder
但这只是意味着您将无法点击其他任何地方 - 甚至无法在UITextFields
上输入文本。
如果我在这两个 UITextFields
之外点击,我该如何做到这一点,我可以调用 resignFirstResponder,以便用户可以返回到其他单元格?
谢谢
【问题讨论】:
【参考方案1】:一个很好的简单方法是继承 UITableView 并实现触摸方法(不要忘记之后将它们传递给超级!)。从那里您可以检查触摸开始并确定它是否是 UITextField 内部的触摸(使用 UIView 中的 hitTest: 方法)。如果 hitTest 没有返回 UITextField 你可以在你的控制器中调用一个方法来让第一响应者辞职。希望这会为您指明正确的方向!
【讨论】:
【参考方案2】:我问了一个类似的question 和found an answer myself 我发布了。基本上,您可以在您的自定义 UITableViewCell 中覆盖 hitTest:withEvent: ,它可以让您检测何时在您的单元格或表格视图中的任何其他单元格中发生触摸。我提供了一个示例 hitTest: 方法,它复制了原始 hitTest: 的功能,你可以添加你需要的东西。您可以像我一样在 hitTest 函数中添加您的 resignFirstResponder 或进一步自定义它。
【讨论】:
【参考方案3】:与其尝试在字段外点击以退出第一响应者,只需在键盘显示时使用 -setFrame 调整您的 tableview 的大小,使其位于键盘上方的可见区域。然后您就可以将视图滚动到其他单元格。您可以通过像这样注册事件来通知您键盘可见:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
然后实现keyboardWillShow:
- (void)keyboardWillShow:(NSNotification*)notification;
[tableView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 200.0f)];
最好的问候。
【讨论】:
我真的希望能够放弃FirstResponder,因为键盘位于TabBar 的顶部,如果用户愿意,他们应该能够返回到它。以上是关于点击UITableView时resignFirstResponder?的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollview 中的 UIView 中的 UITableView :点击时 UITableView 数据被清除