7

以下のコードを使用して、検索バーと検索フィールドの背景画像を設定しました。Xcode5 DP2 と ios 7 を使用しています。

[[UISearchBar appearance] setSearchFieldBackgroundImage:[UIImage imageNamed:@"fieldBg"] forState:UIControlStateNormal];
[[UISearchBar appearance] setBackgroundImage:[UIImage imageNamed:@"searchBarBg"]];

このコードは正常に動作します。しかし、キャンセルボタンの画像もカスタマイズしたいです。そのために、viewWillAppear と searchBarTextDidBeginEditing で次のコードを使用しました。ロード中に初めて機能します。

for (UIView *searchbuttons in _searchBar.subviews)
{
    if ([searchbuttons isKindOfClass:[UIButton class]])
    {
        UIButton *cancelButton = (UIButton*)searchbuttons;
        cancelButton.enabled = YES;
        [cancelButton setBackgroundImage:[UIImage imageNamed:@"cancelImage"] forState:UIControlStateNormal];
        break;
    }
}

キャンセル ボタンが 1 回クリックされると、カスタム イメージはそこに表示されません。_searchBar.subviews をログに記録し、結果を次のように取得しました

po [_searchBar subviews]
<__NSArrayM 0x210b1120>(
<UISearchBarBackground: 0x1fd6ff80; frame = (0 0; 768 44); userInteractionEnabled = NO; layer = <CALayer: 0x1fdafaf0>>,
<UISearchBarTextField: 0x1fd6f2f0; frame = (5 -3; 758 50); text = ''; clipsToBounds = YES; opaque = NO; gestureRecognizers = <NSArray: 0x1fdc10b0>; layer = <CALayer: 0x1fd6f480>>
)

このことから、チェックしているサブビューの下にキャンセルボタンが来ていないことがわかりました。考えられるすべてのデリゲート メソッドで上記のコードを試しましたが、問題を解決できませんでした。

4

1 に答える 1

2

関数内で使用[self setShowsCancelButton:NO animated:NO];して、好きな場所layoutSubviewsにカスタムを追加できUIButtonます。キャンセル ボタンの機能のコードを書くのに苦労するだけです。

于 2013-07-26T06:44:42.483 に答える