微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用IOS中的UISearchController,当您在搜索框之外单击时会激发哪些委托方法

如何解决使用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:

https://developer.apple.com/documentation/uikit/uisearchcontrollerdelegate/1618651-diddismisssearchcontroller?language=objc

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?