IOS7でUISearchBar
の[キャンセル]ボタンのテキストの色を変更する必要があります。
通常UISearchBar
[キャンセル]ボタンtextColor
は青色であり、textColor
をredColor
に変更したいです。
どうすれば変更できますか?
自分の質問に対する答えを見つけました。
ここにコードがあります。すべてのキャンセルボタンを変更する場合は、AppDelegate
を追加します。
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor redColor],
UITextAttributeTextColor,
[UIColor whiteColor],
UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
UITextAttributeTextShadowOffset,
nil]
forState:UIControlStateNormal];
迅速:
let attributes = [NSForegroundColorAttributeName : UIColor.red]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: .normal)
ボタンのテキストの色のみを設定する場合、必要なのは1行のみです。
[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor redColor]];
もっと簡単な方法->
self.searchbar.tintColor = [UIColor darkGrayColor];
このようにできます
[yourSearchBarName setTintColor:[UIColor whateverColorYouWant]];
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
でこのようにUISearchBar
のサブビューを変更できます
UIView *view = [_searchBar.subviews objectAtIndex:0];
for (UIView *subView in view.subviews) {
if ([subView isKindOfClass:[UIButton class]]) {
UIButton *cancelButton = (UIButton *)subView;
[cancelButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[cancelButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
}
}
Swift 5
:
let searchBarCancelButtonForegroundColor = UIColor.red
let attributes = [NSAttributedString.Key.foregroundColor: searchBarCancelButtonForegroundColor]
// Regular mode
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: .normal)
// After click
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).tintColor = searchBarCancelButtonForegroundColor
Swift 4
appearance
モジュールのUIAppearance
関数を使用します-
方法1:-searchBar
でロード時にキャンセルボタンを表示-
let attributes = [NSAttributedStringKey.foregroundColor : UIColor.red]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: .normal)
または-
方法2:-searchBar
がクリックされた後にキャンセルボタンの色を表示する-
UIBarButtonItem.appearance(whenContainedInInstancesOf:[UISearchBar.self]).tintColor = UIColor.red
次のように検索バーのキャンセルボタンをフォーマットできます。
[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor whiteColor]];
[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTitle:@"Your Text Here"];
それがあなたのために働くことを願っています。
スウィフト3:
このコードを使用して、赤色(テキスト、コース、ボタン)を設定します
searchController.searchBar.tintColor = .red
キャンセルボタンの色を白に変更したい場合は、このコードも追加してください
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.white], for: .normal)
[[UISearchBar appearance] setTintColor:[UIColor redColor]];
テスト済みSwift 4
let barButtonItem = UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self])
barButtonItem.title = NSLocalizedString("Cancel", comment: "")
barButtonItem.setTitleTextAttributes([.font : UIFont.systemFont(ofSize: 15.0, weight: .medium),
.foregroundColor : #colorLiteral(red: 0.1960784314, green: 0.1960784314, blue: 0.1960784314, alpha: 1)], for: .normal)
カーソルとボタンの色を個別に設定する私のアプローチは次のとおりです。AppDelegateでカーソルの色を青に設定します(-application:didFinishLaunchingWithOptions :):
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTintColor:[UIColor blueColor]];
次に、各コントローラーの検索バーの色合いを使用して、ボタンの色を設定します。ストーリーボード上でも色合いの色を設定できます。
Swift= 3:
self.searchController.searchBar.tintColor = UIColor.white
Swift 4.2
let attributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: UIControl.State.normal)
テキスト属性は、IOS 7から非推奨ですIOS 7以降
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName : [UIFont fontWithName:@"Helvetica" size:17]} forState:UIControlStateNormal];
スイフト4
let uiButton = bar.value(forKey: "cancelButton") as? UIButton
uiButton?.setTitle("Cancel", for: .normal)
uiButton?.setTitleColor(UIColor.white,for: .normal)
UISearchBarの代わりに SHSearchBar があります。このSwiftフレームワークは、オープンソースのハッキングなしで簡単にカスタマイズでき、多くの単体テストがあり、 Cocoapods で利用できます。少なくともiOS 8が必要です。
Swiftを使用している人のために、最初に Eddie Kの拡張子 を追加する必要がありました
それから私はそれをそのように呼ぶことができました(基本的に受け入れられた答えでサボがしたこと):
UIBarButtonItem.appearanceWhenContainedWithin(UISearchBar.self).setTitleTextAttributes()