検索バーをサブクラス化せずに UISearchBar Cancel ボタンのテキスト フォントと色を変更する方法はありますか?
11 に答える
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];
キャンセルボタンを変更したいだけの場合は、次の方法で実行できます。
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
オブジェクトはどこですか。
htinlinn の回答に基づいて、これはviewDidLoad
iOS 7 の検索バーを使用してビュー コントローラーのメソッドで使用したものです。
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil]
setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], NSForegroundColorAttributeName, nil]
forState:UIControlStateNormal];
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 メソッド ( UITextAttributeTextColor
iOS 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
}
}
検索バーのキャンセル ボタンを変更するには、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; } }
searchBar の tint プロパティを使用して searchBar の色を変更できます。キャンセル ボタンの色は UISearchBar の色に従って変更されます。手動で編集できません。ただし、ネイティブのキャンセル ボタンを非表示にするインターフェイス ビルダーでいつでもカスタムを配置できます。ユーザーはカスタム ボタンを searchBar のキャンセル ボタンとして使用します。
これを試してください:
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"SourceSansPro-Regular" size:14]} forState:UIControlStateNormal];
ここではるかに良い解決策
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"];