1

私のViewControllerはカスタムUIViewController <UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchDisplayDelegate>です。スコープバーを表示するようにUISearchBarを設定しました。

ビューコントローラを一度インスタンス化してから、同じビューをオンデマンドで表示します。[self presentModalViewController:mySearchController fromView:self.view];

これで、View Controllerをフォームシートとして表示するように構成すると、ビューが最初に表示されたときにのみスコープバーが表示されます。次回スコープバーが表示されないとき。

ビューをページシートとして表示すると正常に機能します。ただし、この場合、スコープバーがすでに配置されているのは初めてですが、その後は、最初の応答者になるとすぐに検索バーにアニメーション化されます。

インスペクターのビューとコントローラーの設定をいじってみましたが、うまくいきませんでした。

この動作の原因は何ですか?

次回ビューを表示するときにスコープバーをフォームシートに表示するにはどうすればよいですか?

ビューが非表示/再表示されたときにUISearchBarが別の状態になるのを防ぐ方法はありますか?

4

1 に答える 1

0

検索でスコープバーのタイトルを設定してdelegate編集を開始しnil、検索が終了したときに編集を開始します。そして、showScopeBarこのメソッドの直後にメソッドを追加します。それが役立つかどうか試してみてください。

例:-

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar { 
  [searchBar setScopeButtonTitles:[NSArray arrayWithObjects:@"Title1", @"Title2", nil]];
  [searchBar setShowsScopeBar:YES];
  //...
}

そして、でdidEndEditing

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
  [searchBar setScopeButtonTitles:nil];
  [searchBar setShowsScopeBar:NO];
  //..
}

これに加えて、スコープバーを表示したいときはいつでも、上記の行を使用してスコープバーを表示および非表示にすることができます。

于 2012-10-22T22:03:14.513 に答える