2015-02-10 18 views
49

這必須是微不足道的,但我找不到如何以編程方式解除UISearchController?你如何解僱UISearchController? (iOS 8和後續)

請注意,這是新的UISearchController(2014年推出iOS 8),而不是UISearchDisplayController。

到目前爲止,這裏就是我有

// Dismiss the search tableview 
searchController.dismissViewControllerAnimated() 
// Clear the Search bar text 
searchController.active = false 

但我仍然有取消按鈕,不能擺脫它。

回答

114

行,所以更多的測試後,原來你只需要設置:

searchController.active = false 
// or swift 4+ 
searchController.isActive = false 

這是我想的第一件事,但我把它叫做中的UISearchControllerDelegate方法,沒有工作一個(也許應該用dispatch_async調用它(halbano的答案似乎證實了這一點))。

無論如何,因爲我無法在網上找到答案,我正在回答我自己的問題,我希望它能幫助別人。

+1

這實際工作! Idk如何更改變量實際觸發UI重繪,但它的工作原理 – Bhargav 2016-05-16 07:04:16

+1

@Bhargav最有可能是因爲有一些KVO(關鍵值觀察) – Nycen 2016-05-16 08:58:39

+1

加上它調用'UISearchControllerDelegate'的'didDismissSearchController(searchController)'方法。 – 2016-12-09 22:25:41

15

當您試圖在繼續查看另一個視圖後解除搜索控制器時,是否有此問題?我也遇到過這個問題。我想你可能想在呈現UISearchController按照這個帖子UISearchController not dismissed when View is pushed視圖控制器使用

self.definesPresentationContext = true 

。這個對我有用。

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; 
    }); 
} 

希望它有助於某人。

+3

不是確切的代碼,但派遣異步指向我在正確的方向! – kennydust 2016-01-04 05:15:10

+0

好!另外獲得處理UI元素的主線程是強制性的,也許這是魔術。 – halbano 2016-01-04 17:21:13

0

我不得不使用搜索和interactionController,後解決了這個問題只是包括行: self.dismissViewControllerAnimated(假,完成:無)

打開的互動和清楚沒有委託改變搜索。

+0

問題是這不會觸發一些委託函數,如'willDismissSearchController',這可能是必要的。 – aasatt 2018-01-05 00:17:15

0

SWIFT 4+

searchController.isActive = false