如何在不破坏控件的情况下判断用户何时点击或拖动控件?

时间:2013-01-24 15:59:29

标签: iphone ios xamarin.ios

这是我的情况:我在导航控制器中有一个UISearchBar和一个UITableView。当用户点击搜索栏时,键盘弹出,以便用户可以键入搜索字符串,如下所示:

enter image description here

但是键盘模糊了列表,所以我想做到这一点,如果用户点击表格,键盘就会消失,而且我遇到了惊人的难度。

  1. 如果我使用TapGestureRecognizer,我可以判断用户是否点按任何地方,但是当他们点击表格时,正常的表格事件不起作用。
  2. 我尝试了别的东西(现在不记得了),如果用户点击桌子,我就得到了这个事件,但没有点击和拖动,这很常见,所以这还不够。
  3. 我想要的是桌子本身的TouchDownInside事件,所以当表格获得任何类型的用户输入时我可以解除键盘,但这似乎不存在。最好的方法是什么?

2 个答案:

答案 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;
}

这假设表格还通过手势识别器管理其手势,从而允许两者同时工作。