web-dev-qa-db-ja.com

UISearchControllerをどのように却下しますか? (iOS 8以降)

これはささいなことですが、UISearchControllerをプログラムで閉じる方法を見つけることができませんか?

UISearchDisplayControllerではなく、新しいUISearchController(2014年にiOS 8で導入された)であることに注意してください。

これまでのところ、私が持っているものです

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

しかし、まだキャンセルボタンがあり、それを取り除くことはできません。

62
Nycen

OKですので、さらにテストした後、設定するだけでよいことがわかります。

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

これは私が最初に試したものですが、動作しなかったUISearchControllerDelegateメソッドの1つで呼び出しました(おそらくdispatch_asyncで呼び出したはずです(halbanoの答えはそれを確認しているようです))。

とにかく、私はその答えをオンラインで見つけることができなかったので、私は自分の質問に答えています。それが誰かを助けることを願っています。

155
Nycen

別のビューにセグメンテーションした後に検索コントローラーを閉じるときに、この問題が発生しましたか?私もこの問題に遭遇しました。使いたいかもしれません

self.definesPresentationContext = true 

この投稿に従ってUISearchControllerを提示するView Controllerで ViewがプッシュされたときにUISearchControllerが却下されない 。わたしにはできる。

20
Yaoyu Yang

ナビゲーションバーに埋め込まれた鉱山を紹介していました。私のために働くコードは:

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

それが誰かを助けることを願っています。

9
halbano

スイフト4+

searchController.isActive = false
5
Boris Nikolic

検索とinteractionControllerを使用してこの問題が発生し、次の行を含めるだけで解決しました:self.dismissViewControllerAnimated(false、completion:nil)

インタラクションを開き、デリゲートを変更せずに検索をクリアします。

1
MSamsoniuk