iOS 7 でa を使用すると、奇妙な動作がUISearchDisplayController発生します (参考: たまたま iOS 7 で開発していますが、他のバージョンではテストしていません)。
設定:
UIViewController( にリンクされているUINavigationController) には、次のものがあります。- メソッドに接続された右側の検索ボタンを持つ
UINavigationItem親からの1UINavigationControllerUIBarButtonItemshowSearchbar - を保持するその下の追加の
UINavigationItem右UISegmentedControl - 1
UITableViewをUISearchDisplayControllerヘッダーにドラッグ アンド ドロップ - に
ViewDidLoad、追加しましたself.tableView.contentOffset = CGPointMake(0, 44); 
- メソッドに接続された右側の検索ボタンを持つ
 -(IBAction)showSearchbar{ [self.searchDisplayController setActive:YES animated:YES]; }
上記のすべてで、ビューをロードするとすぐに+ (上記の 1.2) のUISearchBar後ろに隠れます - これは予想どおりであり、意図したとおりです。UINavigationItemUISegmentedControl
ただし、次の 2 つの異なる動作が見られます。
- が表示される
UITableViewまで を下にドラッグし、 のをクリックするか、検索ボタン (上記の 1.1) をクリックすると、が表示されます。これが発生すると、両方の が画面の外に移動し、が短くなり、[キャンセル] テキスト ボタンが表示されます。[キャンセル] ボタンをクリックすると、が非アクティブになります - これは予期されることです。UISearchBarUITextFieldUISearchBarUISearchDisplayControllerUINavigationItemUITextFieldUISearchDisplayController - ただし、検索ボタンをクリックして を表示する前に をドラッグして表示しないと、[キャンセル] ボタンをクリックしても機能しません。代わりに、それはあたかも触れているかのようです。
UITableViewUISearchBarUISearchDisplayControllerUITextField 
showSearchbarメソッドをに変更してみまし[self.searchBar becomeFirstResponder];たが、何も変わりません。
2 番目の動作では、UISearchDisplayControllerがアクティブな場合、[キャンセル] ボタンが存在しないかのように表示されます (UISearchBarがまだ にある場合のの状態のようにUITableView)。
キャンセルボタンを機能させる方法についてのアイデアはありますか?