iOS UISearchController:等到 UISearchController 在取消搜索后被解除

Posted

技术标签:

【中文标题】iOS UISearchController:等到 UISearchController 在取消搜索后被解除【英文标题】:iOS UISearchController: Wait until UISearchController is dismissed after canceling search 【发布时间】:2018-08-02 17:49:23 【问题描述】:

我有一个UISearchController,当用户单击取消按钮时它会被关闭。用户单击取消按钮后,我希望首先关闭 UISearchController,然后需要调用 showNewTableData 方法。这是我正在使用的代码。

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 
    dispatch_async(dispatch_get_main_queue(), ^
        [self showNewTableData];
    );


- (void)showNewTableData 
      if (self.searchController.active && self.searchController.searchBar.text.length > 0) 
         // show search data
       else 
         // show non search data
      
    

使用dispatch_async 似乎可以很好地满足我的要求,但不确定这是否是个好主意。如果我不使用dispatch_async,我最终会显示搜索数据,因为搜索栏还没有完成清除文本并且它仍然处于活动状态。任何建议表示赞赏。

【问题讨论】:

【参考方案1】:

鉴于您尝试更改 UI 的方式,可以在主线程中执行此操作。

【讨论】:

那么在dispatch_async块的UITableView中添加新数据就可以了,对吧?抱歉,只是想 100% 确定。 你可以从任何地方添加数据,调度的问题是特定于你的问题,因为你希望在下一个之前发生一些事情现在如果我们专门讨论表格视图,它可能最好只需在搜索开始或结束时更改表格视图的数据源,沿着结果和过滤结果行更改,并根据搜索状态更改这些内容。

以上是关于iOS UISearchController:等到 UISearchController 在取消搜索后被解除的主要内容,如果未能解决你的问题,请参考以下文章

iOS13 上的 UISearchController 崩溃

iOS 12 上的 UISearchController 子类崩溃

你如何解除 UISearchController ? (iOS 8 及以下)

iOS 上的 UISearchController 不调用 cellForRowAtIndexPath

如何在 iOS 11 上删除 UISearchController 下的行?

UISearchController 打开后,iOS 13 无法滚动到底部