0

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

在此处输入图像描述

但是键盘遮住了列表,所以我想这样做,如果用户点击桌子,键盘就会消失,我遇到了令人惊讶的困难。

  1. 如果我使用 TapGestureRecognizer,我可以判断用户是否在任何地方点击,但是当他们点击桌子时,正常的桌子事件不起作用。
  2. 我尝试了其他东西(现在不记得是什么了),如果用户点击表格,我得到了事件,但没有点击和拖动,这很常见,所以这还不够。

我想要的是表本身上的 TouchDownInside 事件,因此当表获得任何类型的用户输入时,我可以关闭键盘,但这似乎不存在。最好的方法是什么?

4

2 回答 2

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/

于 2013-01-24T16:03:01.600 回答
1

如果我使用 TapGestureRecognizer,我可以判断用户是否在任何地方点击,但是当他们点击桌子时,正常的桌子事件不起作用。

您可以尝试cancelsTouchesInView将点击手势识别器设置为 NO:

tapGestureRecognizer.cancelsTouchesInView = NO;

即使手势被识别,这也应该允许将触摸转发到视图。

您可能还需要为您的手势识别器和以下方法定义一个委托:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{
    return YES;
}

这是假设桌子还通过手势识别器管理其手势,从而允许两者可以同时工作。

于 2013-01-24T16:05:44.777 回答