【发布时间】:2014-10-14 00:19:00
【问题描述】:
我正在从我刚开始的新工作中筛选预先存在的代码,我遇到的第一个错误是附加到 UITableView 子类的搜索栏,它在之后关闭键盘每一次击键。经过一番搜索,我找到了this SO question,似乎我找到了答案:应用程序在每次击键后使用reloadData 刷新结果,并且重新加载调用resignFirstResponder 并关闭键盘。令人沮丧,但解释和理解。
但后来我的老板指出,我们在应用程序的其他地方使用几乎完全相同的代码,而且效果很好。怎么可能?我发现自己处于一个不寻常的位置,需要解释为什么某些东西会起作用,因为上面的链接表明在reloadData 期间关闭键盘是“正常”行为。
以下是来自两个 ViewController 的相关方法,每个 ViewController 都是同一个自定义 UITableView 的子类。 (方法已被简化,但不同的行为仍然存在。)我的一部分认为它一定是埋藏在两个子类之间的差异中,但是如果reloadData 是问题并且它没有在任何地方被覆盖,这是否意味着子类无关紧要?
查找视图:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self.tableView reloadData];
NSLog(@"Lookup Reloaded");
}
搜索视图:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self.tableView reloadData];
NSLog(@"Search Reloaded");
}
如您所见,它们是相同的。每次击键后都会成功调用两者,但前者会关闭键盘,而后者不会。
这些视图控制器中的每一个都有超过一千行长,所以我很难缩小可能导致不同行为的原因。了解 FirstResponders 和 TableView reloads 的人可以帮助我了解在哪里寻找的线索吗?这似乎是一个相当简单的过程(按下一个键>调用该方法>它重新加载表格>键盘在该过程中被关闭)没有太多空间来改变这种行为,但显然有一种方法可以防止最后一步,因为搜索视图已经在这样做了。
知道我应该将搜索重点放在哪里以找出原因吗?
【问题讨论】:
-
在其他键盘不关闭的情况下,您的表格是否会重新加载?
标签: ios uitableview