问题描述
使用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
}
因此,最重要的是,如果我能从单击表视图而不是单击取消中捕获不同的结果,那么我可以解决问题。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)