21

検索バーをサブクラス化せずに UISearchBar Cancel ボタンのテキスト フォントと色を変更する方法はありますか?

4

11 に答える 11

73

UIBarButtonItemに含まれている場合の の外観を変更することで、キャンセル ボタンのスタイルを変更できますUISearchBar

例えば、

[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                      [UIColor blueColor], 
                                                      UITextAttributeTextColor, 
                                                      [UIColor darkGrayColor], 
                                                      UITextAttributeTextShadowColor, 
                                                      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], 
                                                      UITextAttributeTextShadowOffset,
                                                      nil] 
                                            forState:UIControlStateNormal];
于 2012-07-20T04:21:56.737 に答える
8

キャンセルボタンを変更したいだけの場合は、次の方法で実行できます。

if let cancelButton = searchBar.valueForKey("cancelButton") as? UIButton {
    cancelButton.setTitle(<your_string>, forState: <UIControlState>)
    cancelButton.setTitleColor(<your_uicolor>, forState: <UIControlState>)
    cancelButton.setAttributedTitle(<your_nsattributedstring>, forState: <UIControlState>)
}

searchBarあなたのUISearchBarオブジェクトはどこですか。

于 2016-06-21T23:33:13.453 に答える
5

htinlinn の回答に基づいて、これはviewDidLoadiOS 7 の検索バーを使用してビュー コントローラーのメソッドで使用したものです。

[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil]
                     setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], NSForegroundColorAttributeName, nil] 
                                   forState:UIControlStateNormal];
于 2014-02-23T03:10:32.553 に答える
0

iOS 9.0 以降の Swift ソリューション (htinlinn の回答を変更):

if #available(iOS 9.0, *) {
    UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UISearchBar.classForCoder()])
        .setTitleTextAttributes([
            NSFontAttributeName: UIFont.systemFontOfSize(12),
            NSForegroundColorAttributeName: UIColor.blueColor(),
            NSShadowAttributeName: NSShadow(color: UIColor.redColor(), offset: CGSizeMake(0, -1), blurRadius: 2)
            ],
            forState: UIControlState.Normal)
} else {
    // Link to Objective-C Method
}

現在の Objective-C メソッド ( UITextAttributeTextColoriOS 7.0 以降では非推奨):

[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil]
 setTitleTextAttributes:@{
                          NSForegroundColorAttributeName: [UIColor blueColor],
                          NSFontAttributeName: [UIFont systemFontOfSize:12]}
 forState:UIControlStateNormal];

上記のコードで使用されている私の小さな影の拡張機能:

extension NSShadow {
    convenience init(color: AnyObject!, offset: CGSize, blurRadius: CGFloat) {
        self.init()
        self.shadowColor = color
        self.shadowOffset = offset
        self.shadowBlurRadius = blurRadius
    }
}
于 2016-02-25T13:10:19.850 に答える
0

検索バーのキャンセル ボタンを変更するには、Button オブジェクトを取得し、そのボタンの参照をカスタム ボタンに変更します。

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(50,20,300,30)];
searchBar.delegate = self;
searchBar.barStyle = UIBarStyleDefault;
searchBar.showsCancelButton = YES;
UIButton *cancelButton;
for (id button in searchBar.subviews)
{
    if ([button isKindOfClass:[UIButton class]])
   {
        cancelButton=(UIButton*)button;
        break;
   }
}
于 2012-07-20T04:11:09.830 に答える
0

searchBar の tint プロパティを使用して searchBar の色を変更できます。キャンセル ボタンの色は UISearchBar の色に従って変更されます。手動で編集できません。ただし、ネイティブのキャンセル ボタンを非表示にするインターフェイス ビルダーでいつでもカスタムを配置できます。ユーザーはカスタム ボタンを searchBar のキャンセル ボタンとして使用します。

于 2012-07-20T04:15:30.320 に答える
-1

これを試してください:

[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"SourceSansPro-Regular" size:14]} forState:UIControlStateNormal];
于 2016-12-28T04:35:35.327 に答える
-1

ここではるかに良い解決策

UIButton *cancelButton = [searchBar valueForKey:@"_cancelButton"];
[cancelButton setTitleColor:[UIColor yourColor] forState:UIControlStateNormal];
[cancelButton setTitle:@"Your Text" forState:UIControlStateNormal];

同様に、ボタンの他​​のスタイルとテキスト プロパティを変更できます。

iOS 13.* の場合 (コメントで @AnujAroshA の回答)

UIButton *cancelButton = [searchBar valueForKey:@"cancelButton"];
于 2015-11-26T10:43:41.627 に答える