这是我的情况:我在导航控制器中有一个UISearchBar和一个UITableView。当用户点击搜索栏时,键盘弹出,以便用户可以键入搜索字符串,如下所示:
但是键盘模糊了列表,所以我想做到这一点,如果用户点击表格,键盘就会消失,而且我遇到了惊人的难度。
我想要的是桌子本身的TouchDownInside事件,所以当表格获得任何类型的用户输入时我可以解除键盘,但这似乎不存在。最好的方法是什么?
答案 0 :(得分:1)
一个简单的解决方案是在UITableView滚动时捕获,因为UITableView扩展了UIScrollView,你可以查找scrollViewDidScroll:并使搜索栏重新签名第一个响应器以使键盘消失,同样可以完成scrollViewWillBeginDragging:方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
[searchBar resignFirstResponder];
}
在你的UITableViewDelegate上实现它,因为它表现为你的UITableView的委托
的更多信息
http://developer.apple.com/library/ios/documentation/uikit/reference/uiscrollviewdelegate_protocol/
答案 1 :(得分:1)
如果我使用TapGestureRecognizer,我可以判断用户是否点按任何地方,但是当他们点击桌子时,正常的桌面活动无法正常工作。
您可以尝试将cancelsTouchesInView
设置为NO,以用于您的点击手势识别器:
tapGestureRecognizer.cancelsTouchesInView = NO;
即使识别出手势,也应该允许将触摸转发到视图。
您可能还需要为手势识别器定义一个委托,并使用以下方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
这假设表格还通过手势识别器管理其手势,从而允许两者同时工作。