0

以下のコードを使用しています。IOS 6.x で完全に動作しています。Xcode 4.6.x からビルドします。しかし、そのコードは、xcode 5.x から構築された IOS 7.x では機能しなくなりました。

私の目的は、ユーザーが UISearchBar で編集を開始したときに、UISearchBar のキャンセル ボタンの代わりにカスタム イメージを表示することです。

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
    [searchBar setShowsCancelButton:YES animated:YES];
    UIButton *cancelButton = nil;
    for(UIView *subView in searchBar.subviews){
        if([subView isKindOfClass:UIButton.class]){
            cancelButton = (UIButton*)subView;
        }
    }
    [cancelButton setTintColor:[UIColor colorWithRed:167.0/255.0 green:0.0/255.0 blue:0.0/255.0 alpha:1.0f]];
    [cancelButton setBackgroundImage:[UIImage imageNamed:@"customKeyboardIcon.png"] forState:UIControlStateNormal];
    [cancelButton setTitle:nil forState:UIControlStateNormal];
}
4

2 に答える 2

6

のキャンセル ボタンUISearchBarのタイプはUIBarButtonです。私がやった方法は次のとおりです(iOS 5,6,7で動作します):

 [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setBackgroundImage:cancelButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

すべての にカスタム キャンセル ボタンが必要ない場合は、カスタム クラスをUISearchBar作成し、 を新しいカスタムUISearchBarクラスに置き換えます。appearanceWhenContainedIn:[UISearchBar class]

テキストを削除するには:

[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitle:@""];

画像に関しては、画像リソースを調整するか、UIImageいくつかのインセットを使用して を作成します (期待される結果が得られるまで挿入をいじります)。

     UIImage *cancelButtonImage = [UIImage imageNamed:SEARCH_BAR_CANCEL_BUTTON];
cancelButtonImage = [cancelButtonImage resizableImageWithCapInsets:CANCEL_BUTTON_IMAGE_INSETS];
于 2013-10-21T12:01:45.857 に答える