这是我的情况:我在导航 Controller 中有一个 UISearchBar 和一个 UITableView。当用户点击搜索栏时,键盘弹出,用户可以输入搜索字符串,如下所示:
但是键盘遮盖了列表,所以我想做到这一点,如果用户点击表格,键盘就会消失,我遇到了很多困难。
- 如果我使用 TapGestureRecognizer,我可以判断用户是否点击了任何地方,但是当他们点击表格时,正常的表格事件不起作用。
- 我尝试了其他方法(现在不记得是什么了),如果用户点击表格而不是点击和拖动,我会收到事件,这很常见,所以这还不够。
我想要的是类似于表格本身的 TouchDownInside 事件,这样我就可以在表格收到任何类型的用户输入时关闭键盘,但这似乎不存在。执行此操作的最佳方法是什么?
最佳答案
一个简单的解决方案是在 UITableView 滚动时捕捉,因为 UITableView 扩展了 UIScrollView,您可以查找 scrollViewDidScroll: 并使搜索栏退出第一响应者以使键盘消失,同样可以使用scrollViewWillBeginDragging: 方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
[searchBar resignFirstResponder];
}
在你的 UITableViewDelegate 上实现它,因为它充当你的 UITableView 的委托(delegate)
更多信息在
http://developer.apple.com/library/ios/documentation/uikit/reference/uiscrollviewdelegate_protocol/
关于iphone - 如何在不破坏控件的情况下判断用户何时点击或拖动控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14505507/