我正在筛选我刚开始的一项新工作中已有的代码,我遇到的第一个错误是附加到 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/