Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用IOS中的UISearchController,当您在搜索框外单击时,会触发哪些委托方法_Ios_Objective C_Swift_Uisearchcontroller_Uisearchbardelegate - Fatal编程技术网

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

使用IOS中的UISearchController,当您在搜索框外单击时,会触发哪些委托方法,ios,objective-c,swift,uisearchcontroller,uisearchbardelegate,Ios,Objective C,Swift,Uisearchcontroller,Uisearchbardelegate,使用IOS中的UISearchController和UISearchBar,当搜索程序处于活动状态并单击“取消”时,将触发以下委托方法: -(无效)搜索栏取消按钮点击:(UISearchBar*)搜索栏 但是,如果用户仅在搜索栏外单击,tableview将取消变暗,如果分配给navigationBar,则搜索栏将返回tableview。(但是,tableview不会重新加载,而是继续显示搜索结果。) 我的问题是,当用户在搜索栏外单击时,会触发哪些委托方法(如果有) 我需要捕捉这个事件有很多原因,

使用IOS中的UISearchController和UISearchBar,当搜索程序处于活动状态并单击“取消”时,将触发以下委托方法:

-(无效)搜索栏取消按钮点击:(UISearchBar*)搜索栏

但是,如果用户仅在搜索栏外单击,tableview将取消变暗,如果分配给navigationBar,则搜索栏将返回tableview。(但是,tableview不会重新加载,而是继续显示搜索结果。)

我的问题是,当用户在搜索栏外单击时,会触发哪些委托方法(如果有)

我需要捕捉这个事件有很多原因,包括让segue在prepareforsgue中正常工作

编辑:

我需要的是当用户单击搜索结果时发生的事件,这与单击“取消”按钮不同

当用户单击“取消”时,预期的行为是返回到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 
}

所以,归根结底,我认为如果我可以从单击tableview而不是单击cancel中捕获不同的结果,我就可以解决这个问题。

当单击搜索栏的cancel按钮时,
UISearchControllerDelegate
方法
-didDismissSearchController:
被调用,或者,如果触摸表视图上的灰显覆盖


首先,我会查看Apple文档中的委托方法,看看是否有任何相关内容。从文档描述来看,它应该可以工作,但单击“取消”按钮或单击灰显的tableview都不会调用该方法。VC订阅了这些委托协议:UISearchControllerDelegate、UISearchBarDelegate、UISearchChresultsUpdating我需要在某个地方设置一个额外的委托吗?我用-(void)searchBartextdidediting:(UISearchBar*)searchBar*)searchBar触摸灰显的tableview时启动了它;然而,这仍然不能解决我的问题,因为我需要区分单击“取消”按钮和选择一个搜索结果。在回答你之前,我实际上建立了一个小样本项目,它对我很有用。所以,在这一点上我有点困惑。我的视图控制器符合UISearchControllerDelegate协议,并实现了-didDismissSearchController:方法。该方法被调用用于取消按钮和触摸灰显的表格。我不知道你那边发生了什么。我一直想做类似的事情,所以这里有一个链接到我刚刚创建的存储库。您将看到我提到的演示项目。这是可以想象的最简单、最简单的东西,但功能是按描述的那样工作的。祝你好运