你如何解雇UISearchController?(iOS 8及以下版本)

Nyc*_*cen 64 swift uisearchcontroller

这一定是微不足道的,但我找不到你应该如何以编程方式解雇UISearchController?

请注意,它是新的UISearchController(2014年推出iOS 8),而不是UISearchDisplayController.

到目前为止,这就是我所拥有的

// Dismiss the search tableview
searchController.dismissViewControllerAnimated()
// Clear the Search bar text
searchController.active = false
Run Code Online (Sandbox Code Playgroud)

但我仍然有取消按钮,无法摆脱它.

Nyc*_*cen 162

好的,经过更多的测试,结果你只需要设置:

searchController.active = false
// or swift 4+
searchController.isActive = false
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的第一件事,但是我在其中一个UISearchControllerDelegate方法中调用了它,这些方法不起作用(可能应该用dispatch_async调用它(halbano的答案似乎证实了这一点)).

无论如何,由于我无法在网上找到答案,我正在回答我自己的问题,我希望它能帮到某个人.


小智 20

当你试图在转换到另一个视图后解除搜索控制器时,你有这个问题吗?我也遇到过这个问题.我想你可能想用

self.definesPresentationContext = true 
Run Code Online (Sandbox Code Playgroud)

在根据此帖子呈现UISearchController的视图控制器中,当推送View时,UISearchController不会被解除.这个对我有用.


hal*_*ano 9

我在导航栏上展示了我的矿井.适合我的代码是:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.searchController setActive:NO];
        self.navigationController.navigationBar.topItem.title = @"MYTITLE".uppercaseString;
        self.navigationItem.titleView = nil;
    });
}
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助某人.

  • 不是确切的代码,但调度异步指向我正确的方向! (3认同)
  • @halbano 在主线程上调用此委托方法。我相信搜索栏动画与听众在这里所做的任何事情之间存在串扰,这就是冲突的原因。这将在下一个运行循环中执行响应代码。 (2认同)

Bor*_*lic 6

SWIFT 4+

searchController.isActive = false
Run Code Online (Sandbox Code Playgroud)