web-dev-qa-db-ja.com

ナビゲーションバーのUISearchBar

NavigationBarにUISearchBarを表示するにはどうすればよいですか?

これを行う方法がわかりません。

あなたの助けは大歓迎です。

51
Samui

SearchBarをナビゲーションバーの中央に配置するには:

self.navigationItem.titleView = self.searchBarTop;

SearchBarをナビゲーションバーの左側/右側に配置するには:

UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.rightBarButtonItem = searchBarItem;
84
Borut Tomazin

IOS 7以降、UISearchDisplayControllerはデフォルトでこれをサポートします。 UISearchDisplayControllerのdisplaysSearchBarInNavigationBar = YESこれを簡単に機能させるため。

ドキュメントごと:

IOS 7.0以降では、検索ディスプレイコントローラーのdisplaysSearchBarInNavigationBarおよびnavigationItemプロパティを構成することにより、ナビゲーションバー(UINavigationBarクラスのインスタンス)で検索ディスプレイコントローラーを使用できます。

20
James Kuang

あるコメント者が述べたように、searchDisplayController.displaysSearchBarInNavigationBar = trueは、既存の左/右バーボタン項目を非表示にします。

IOS7のsearchBarの新しいプロパティを使用して、navigationBarsearchDisplayControllerに追加する2つの異なる方法を見つけました。

1)ペン先ベースのアプローチ

.xibを使用している場合、この値にユーザー定義のランタイム属性を設定できます。何らかの理由で、leftBarButtonItemはそのまま残ります。 rightBarButtonItemでテストしていません。

enter image description here

2)コード(タイミングの問題)

コードで実装する場合、タイミングが重要と思われます。最初にsearchBarnavigationBarに追加してから、barButtonItemを設定する必要があるようです。

- (void)viewDidLoad
{
    ...
    self.searchDisplayController.displaysSearchBarInNavigationBar = true;
    self.navigationItem.leftBarButtonItem = [UIBarButtonItem new];
    ...
}
12
djibouti33

Appleの ICatalog サンプルコードをご覧ください。新しいUISearchControllerを3つの異なる方法で使用する方法を示します:モーダル、ナビゲーションバー、ナビゲーションバーの下。

11
Steve Moser

Objective Cコードスニペット

- (void)viewDidLoad {
    UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil];

    if (@available(iOS 11.0, *)) {
        self.navigationItem.searchController = searchController;
    } else {
        self.navigationItem.titleView = searchController.searchBar;
    }
}

続きを読む こちら

1
yoAlex5