ios - UITableView 在一个地方取消 reloadData 上的键盘,但在另一个地方不取消键盘?

标签 ios uitableview

我正在筛选我刚开始的一项新工作中已有的代码,我遇到的第一个错误是附加到 UITableView 子类的搜索栏,它每次击键后关闭键盘。经过一番搜索,我找到了 this SO question ,似乎我找到了答案:应用程序使用 reloadData 在每次击键后刷新结果,并且重新加载调用 resignFirstResponder 并关闭键盘。令人沮丧,但解释和理解。

但后来我的老板指出,我们在应用程序的其他地方使用了几乎完全相同的代码,并且运行完美。怎么可能呢?我发现自己处于一个不同寻常的位置,需要解释为什么某些东西确实有效,因为上面的链接表明在 reloadData 期间关闭键盘是“正常”行为。

下面是两个 ViewController 的相关方法,每个都是从相同的自定义 UITableView 继承而来的。 (方法已经简化,但不同的行为仍然存在。)我的一部分认为它一定是隐藏在两个子类之间的差异中,但是如果 reloadData 是问题所在,它不是没有在任何地方被覆盖,这是否意味着子类无关紧要?

查找 View :

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
    [self.tableView reloadData];
    NSLog(@"Lookup Reloaded");
}

搜索 View :

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
    [self.tableView reloadData];
    NSLog(@"Search Reloaded");
}

如您所见,它们是相同的。每次击键后都会成功调用两者,但前者会关闭键盘而后者不会。

这些 View Controller 中的每一个都超过一千行,所以我很难缩小可能导致不同行为的原因。了解 FirstResponders 和 TableView 重新加载的人可以帮助我找到一些线索吗?这似乎是一个相当简单的过程(按下一个键>调用该方法>它重新加载表>在此过程中键盘被关闭)没有太多空间来改变这种行为,但显然有一种方法可以防止最后一步,因为搜索 View 已经在执行此操作。

知道我应该将搜索重点放在哪里以找出原因吗?

最佳答案

检查此方法是否已在此 UISearchBar 的任一委托(delegate)上实现。

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;

如果此方法返回 NO,它将阻止搜索栏退出第一响应者。

关于ios - UITableView 在一个地方取消 reloadData 上的键盘,但在另一个地方不取消键盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26170912/

相关文章:

ios - 如何在 iOS 的 tableView 上添加 imageView

objective-c - 设置 UITableView 部分边框颜色

ios - 如何为不同的设备设置线宽

ios - 为什么我的 UITableView 不显示数据?

ios - strokeEnd 上的 CABasicAnimation

ios - 删除部分时 UITableView 的平滑动画

ios - 从完成语句变量中检索数据时返回空白

ios - 正在调用 cellForRowAtIndexPath : ever practical?

iOS 6.0 -(BOOL) 应该自动旋转到接口(interface)方向 :(UIInterfaceOrientation)toInterfaceOrientation not calling

ios - UIWebView 在后台更新我有一个 EXC_BAD_ACCESS