22

UINavigationBar の上に UISearchBar を追加し、UIsearchbar showsCancelButton YES を設定します。iOS6 では正常に動作しますが、iOS7 ではキャンセル ボタンが表示されません。以下のコードスニペットを使用しました

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 600, 44)];
searchBar.showsCancelButton = YES;
searchBar.translucent = NO;
[searchBar setTintColor:[UIColor redColor]];
searchBar.backgroundColor = [UIColor yellowColor];
[self.navigationController.navigationBar   addSubview:searchBar];
4

7 に答える 7

44

何らかの理由で iOS7 では、ナビゲーション バーに追加されたときにキャンセル ボタンが表示されません。これは、navigationItem の titleView として設定しようとした場合にも発生します。

最初に UISearchBar を別の UIView にラップすることで、この問題を回避できます。titleView として行う方法は次のとおりです。

UISearchBar *searchBar = [UISearchBar new];
searchBar.showsCancelButton = YES;
[searchBar sizeToFit];
UIView *barWrapper = [[UIView alloc]initWithFrame:searchBar.bounds];
[barWrapper addSubview:searchBar];
self.navigationItem.titleView = barWrapper;
于 2013-09-27T14:24:16.233 に答える
6

同様の問題がありました.キャンセルボタンのあるiPhone検索バーではうまく表示されますが、iPadではキャンセルボタンが表示されませんでした. @Rodskjegg のように UIsearchBar を UIView にラップすると、スタイルの問題が発生します。iPad UIsearchBar では、それを navigationItem の titleView として設定し、UIBarButtonItem を setRighttBarButtonItem に UIBarButtonSystemItemCancel として追加します。

    [self.navigationItem setLeftBarButtonItem:Nil animated:YES];
    self.navigationItem.titleView = self.searchBar;

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
    {
        UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(searchBarCancelButtonClicked:)];

        [self.navigationItem setRightBarButtonItem: cancelButton animated:YES];
    }
    else {
        [self.navigationItem setRightBarButtonItem: nil animated:YES];
    }
于 2014-08-25T10:05:39.723 に答える
4

iOS 7 以降、プロパティdisplaysSearchBarInNavigationBarYESon に 設定するだけで、NavigationBar でUISearchDisplayControllerを自動的に取得できます。UISearchbar

于 2013-11-15T12:53:36.200 に答える
3

私は同じ問題に遭遇しました。これが私の解決策です。これが役立つことを願っています。

さらなる説明: setShowsCancelButton:animated:searchBar に送信すると、魔法のように機能することがわかりました。また、検索バーをナビゲーション バーに追加する最もクリーンな方法は、inメソッドとdelegate メソッドself.navigationItem.titleView = self.searchBar;を呼び出す適切なタイミングです。そのため、必ず searchBar のデリゲートになるように設定してください。setShowsCancelButton:animated:searchBarTextDidBeginEditing:searchBarTextDidEndEditing:self

- (void)viewDidLoad
{
    self.navigationItem.titleView = self.searchBar;
}

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    [searchBar setShowsCancelButton:YES animated:YES]; 
}

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
    [searchBar setShowsCancelButton:NO animated:YES];
}
于 2014-08-21T19:54:22.620 に答える
2

私は同じ問題を抱えていました.iPhoneでは検索キャンセルがうまく表示されましたが、iPadでは表示されませんでした.

UISearchBar を別の UIView にラップする回避策は、外観が異なり、回転時の幅が間違っていたため、うまくいきませんでした。

私の解決策は簡単です。キャンセルせずに検索を使用し、UIBarButtonItem としてキャンセルを追加します。

于 2015-11-08T07:12:02.940 に答える
0

検索バー デリゲートを実装し、これを使用します。

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    searchBar.showsCancelButton = YES;
}
于 2014-12-04T13:50:14.583 に答える