我正在筛选刚刚开始的新工作中预先存在的代码,我遇到的第一个错误是附加到子UITableView类的搜索栏,它在每次击键后都会关闭键盘。经过一番搜索后,我发现了这个问题,似乎我找到了答案:该应用程序用于reloadData在每次击键后刷新结果,并且重新加载正在调用resignFirstResponder and dismissing the keyboard. Frustrating, but explained and understood.
但后来我的老板指出,我们在应用程序的其他地方使用了几乎完全相同的代码,而且它运行得很好。怎么可能呢?我发现自己处于一个不寻常的位置,需要解释为什么某些东西确实有效,因为上面的链接表明在期间关闭键盘reloadData是“正常”行为。
下面是两个 ViewController 中的相关方法,每个 ViewController 都是同一自定义 的子类UITableView。(方法已被简化,但不同的行为仍然存在。)我的一部分认为它一定是埋藏在两个子类之间的差异中的东西,但是如果是reloadData问题所在并且它没有在任何地方被重写,则不会这意味着子类不相关?
查找视图:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self.tableView reloadData];
NSLog(@"Lookup Reloaded");
}
Run Code Online (Sandbox Code Playgroud)
搜索视图:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self.tableView reloadData];
NSLog(@"Search Reloaded");
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它们是相同的。每次击键后都会成功调用两者,但前者会关闭键盘,而后者则不会。
这些视图控制器中的每一个都超过一千行长,因此我很难缩小可能导致不同行为的原因。了解 FirstResponders 和 TableView 重新加载的人可以帮助我了解在哪里查看吗?这似乎是一个相当简单的过程(按下一个键>调用该方法>它重新加载表格>在此过程中关闭键盘)没有太多空间来改变该行为,但显然有一种方法可以防止最后一步,因为搜索视图已经在这样做了。
知道我应该将搜索重点放在哪里以找出原因吗?
因此,答案过于复杂且特定于应用程序,不值得详细讨论,但基本上由于奇怪的和 hack-y 的实现方法,有几个与所UISearchBar定位的工作相关的自定义对象在 的第一行(第 0 部分,第 0 行)的单元格内UITableView。
当重新UITableView加载时,第一行被重新制作,这意味着这些对象被重新制作,从而消除了键盘。当我问我的新老板为什么这样做时,他不记得了。
钱币。
| 归档时间: |
|
| 查看次数: |
4415 次 |
| 最近记录: |