如何解决使用IOS中的UISearchController,当您在搜索框之外单击时会激发哪些委托方法
使用IOS中的UISearchController和UISearchBar,当搜索器处于活动状态并且单击“取消”时,将触发以下委托方法:
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar;
但是,如果用户仅在searchBar外部单击,则表视图将变暗,如果将searchBar分配给navigationBar,则searchBar将返回到tableview。 (但是,tableview不会重新加载,并继续显示搜索结果。)
我的问题是,当用户在searchBar外部单击时会触发哪些委托方法(如果有)?
出于多种原因,我需要捕获此事件,包括使segue在PrepareForSegue中正常工作。
编辑:
我需要的是一个事件,当用户单击搜索结果时发生的事件与单击取消按钮时不同。
当用户单击“取消”时,预期的行为将返回tableView并结束搜索。所以我想打电话给[self.navigationItem.searchController setActive:NO];
以结束搜索。
但是,当用户单击搜索结果时,预期的行为很容易导致他们单击的行进入详细视图。现在,发生的事情是第一次单击只是取消了表视图。第二次单击确实可以进行筛选,但是它使用的是整个表格视图中的行,而不是搜索结果,因此可以将其锁定到错误的项目。
这是我在prepareForSegue中所做的事情:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
Object *item;
if (self.searchUnderway==YES) {
item = [searchResults objectAtIndex:indexPath.row];
} else {
item = [itemsArray objectAtIndex:indexPath.row]
}
// Pass item to destViewController and segue
}
因此,最重要的是,如果我能从单击表视图而不是单击取消中捕获不同的结果,那么我可以解决问题。
解决方法
点击搜索栏的“取消”按钮,或者触摸表格视图上的灰色叠加层时,都会调用UISearchControllerDelegate
方法-didDismissSearchController:
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。