使用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 
}

因此,最重要的是,如果我能从单击表视图而不是单击取消中捕获不同的结果,那么我可以解决问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)