UISearchBarが空の状態でも検索ボタンを有効にする
UISearchBarはデフォルトの設定では、入力が空の状態ではキーボードの検索ボタンが無効になってしまいます。 でも、入力が空の状態でもキーボードの検索ボタンを有効にしたい場合があると思います。
今回はコード側で設定する方法について書いていこうと思います。
実装方法
UISearchBarに検索ボタンの有効・無効の設定項目は無く、UISearchBarの中にあるUITextFieldに設定があります。ですのでまずはUISearchBarの中のUITextFieldを取得する必要があります。
その後、取得したUITextFieldに対して検索ボタンの有効・無効の切り替えプロパティの設定を行います。
以下に順番に実装方法を書いていきます。
UISearchBarの中のUITextFieldの取得
// UISearchBar内のUITextFieldを取得する - (UITextField *)getTextFieldFromView:(UIView *)view { for (UIView *subview in view.subviews) { if ([subview isKindOfClass:[UITextField class]]) { return (UITextField *)subview; } else { UITextField *textField = [self getTextFieldFromView:subview]; if (textField) { return textField; } } } return nil; }
上記のメソッドの引数にUISearchBarを渡して、UITextFieldを取得します。再帰構造にしているのはUISarchBarの直下のSubViewより深い階層にUITextFieldが設定されているためです。
プロパティの設定
// UISeachBar(self.searchBar)の検索ボタンを常に有効にする [self getTextFieldFromView:self.searchBar].enablesReturnKeyAutomatically = NO;
上記のように取得したUITextFieldのリターンキーの自動有効・無効設定を切りに指定します。
おわり
ほんとはStoryboard上の設定ですべてを終わらせたいのですが、無いようなので今回のようなコード側での実装を行っています(あるよお前の目は節穴か!とい場合は是非教えて下さい。)
また、iOS6以前だとUISearchBar直下のSubViewの階層にUITextFieldがあったようなのですが、iOS7からは更に深い階層に潜っているようです。。。やっぱりStoryboardで設定したい。。。そもそもそういう使い方が良くないのかな。