Мне нужно изменить цвет текста кнопки Отмена UISearchBar
в iOS7.
Обычно UISearchBar
Кнопка отмены textColor
является синей, и я хочу изменить textColor
на redColor
.
Как я могу изменить его?
Мне нужно изменить цвет текста кнопки Отмена UISearchBar
в iOS7.
Обычно 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];
Swift:
let attributes = [NSForegroundColorAttributeName : UIColor.red]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: .normal)
Если вы хотите только установить цвет текста кнопки, вам потребуется только одна строка:
[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor redColor]];
Вы можете сделать это так:
[yourSearchBarName setTintColor:[UIColor whateverColorYouWant]];
Гораздо проще →
self.searchbar.tintColor = [UIColor darkGrayColor];
Вы можете изменить subviews UISearchBar
, как это, в - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
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];
}
}
Вы можете отформатировать кнопку отмены поиска, как показано ниже.
[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor whiteColor]];
[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTitle:@"Your Text Here"];
Надеется, что это сработает для вас.
Обновлено для 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
Swift 3:
Используйте этот код для установки красного цвета (текст, курсор, кнопка)
searchController.searchBar.tintColor = .red
если вы хотите изменить цвет кнопки отмены на белый, добавьте этот код тоже
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.white], for: .normal)
[[UISearchBar appearance] setTintColor:[UIColor redColor]];
Мой подход к настройке курсора и цвета кнопки независимо от этого: я установил цвет курсора синим в приложении Делегат приложения (-application: didFinishLaunchingWithOptions:):
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTintColor:[UIColor blueColor]];
И затем используйте цвет оттенка строки поиска в каждом контроллере, чтобы установить цвет кнопок. Вы можете установить цвет оттенков даже на Раскадке.
Для Swift 3:
self.searchController.searchBar.tintColor = UIColor.white
Проверено на 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)
Для быстрой 4.2
let attributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: UIControl.State.normal)
Для людей, использующих Swift, мне пришлось сначала добавить Расширение Eddie K
Тогда я смог назвать это так (в основном, что Сабо сделал в принятом ответе):
UIBarButtonItem.appearanceWhenContainedWithin(UISearchBar.self).setTitleTextAttributes()
UITextAttribute лишается использования IOS 7 ниже для IOS 7 или более поздней версии
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName : [UIFont fontWithName:@"Helvetica" size:17]} forState:UIControlStateNormal];
Альтернативой UISearchBar будет SHSearchBar. Эта быстрая структура легко настраивается без взлома, с открытым исходным кодом, имеет множество модульных тестов и доступна через Cocoapods. Ему нужно, по крайней мере, iOS 8.
Swift 4
let uiButton = bar.value(forKey: "cancelButton") as? UIButton
uiButton?.setTitle("Cancel", for: .normal)
uiButton?.setTitleColor(UIColor.white,for: .normal)