Как изменить цвет текста UISearchBar
?
Как изменить цвет текста поиска в UISearchBar?
Ответ 1
Вам нужно получить доступ к UITextField
внутри UISearchBar. Вы можете сделать это, используя valueForKey("searchField")
var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField") as? UITextField
textFieldInsideSearchBar?.textColor = yourcolor
Обновление Swift 3
let textFieldInsideSearchBar = yourSearchbar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.textColor = yourcolor
Ответ 2
Если вы хотите установить цвет текста для UISearchBar в раскадровке (без кода), это также легко сделать (в инспекторе идентификации). Вот краткий текст для строки поиска.
Ответ 3
Работа в Swift 4 для меня:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.white]
Swift 4.2, IOS 12:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Ответ 4
Если вам нужно только сделать его читаемым на темном фоне, вы можете изменить barStyle. Следующее делает текст и кнопки в белой строке поиска:
searchController.searchBar.barStyle = .black
Ответ 5
public extension UISearchBar {
public func setTextColor(color: UIColor) {
let svs = subviews.flatMap { $0.subviews }
guard let tf = (svs.filter { $0 is UITextField }).first as? UITextField else { return }
tf.textColor = color
}
}
Ответ 6
Самый удобный способ - установить свойство textColor
в UISearchBar
.
Swift 3.0
extension UISearchBar {
var textColor:UIColor? {
get {
if let textField = self.value(forKey: "searchField") as?
UITextField {
return textField.textColor
} else {
return nil
}
}
set (newValue) {
if let textField = self.value(forKey: "searchField") as?
UITextField {
textField.textColor = newValue
}
}
}
}
Использование
searchBar.textColor = UIColor.blue // Your color
Swift 2.3
extension UISearchBar {
var textColor:UIColor? {
get {
if let textField = self.valueForKey("searchField") as? UITextField {
return textField.textColor
} else {
return nil
}
}
set (newValue) {
if let textField = self.valueForKey("searchField") as? UITextField {
textField.textColor = newValue
}
}
}
}
Вы использовали бы его как:
searchBar.textColor = UIColor.blueColor() // Your color
Ответ 7
Это работает для меня на iOS 11, Xcode 9:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = UIColor.blue
Я пишу его в AppDelegate
, но я думаю, он работает, если вы поместите его в другое место.
Ответ 8
Вы можете сделать это, обратившись к UITextField внутри searchBar, то вы можете изменить цвет фона, цвет текста и все другие свойства UITextField.
добавьте следующее расширение для доступа к текстовому полю
extension UISearchBar {
/// Return text field inside a search bar
var textField: UITextField? {
let subViews = subviews.flatMap { $0.subviews }
guard let textField = (subViews.filter { $0 is UITextField }).first as? UITextField else { return nil
}
return textField
}
}
Ответ 9
Начиная с Xcode 11 и iOS 13 появилась возможность прямого доступа к текстовому полю:
searchBar.searchTextField
Вы можете написать некоторый код, чтобы он всегда был таким доступным.
extension UISearchBar {
public var textField: UITextField? {
if #available(iOS 13.0, *) {
return searchTextField
}
guard let firstSubview = subviews.first else {
assertionFailure("Could not find text field")
return nil
}
for view in firstSubview.subviews {
if let textView = view as? UITextField {
return textView
}
}
assertionFailure("Could not find text field")
return nil
}
}
Вы также можете сделать это необязательным при фатальных ошибках, этот код тестируется с iOS 7 до iOS 13GM. Но я бы просто выбрал дополнительную версию.
extension UISearchBar {
public var textField: UITextField {
if #available(iOS 13.0, *) {
return searchTextField
}
guard let firstSubview = subviews.first else {
fatalError("Could not find text field")
}
for view in firstSubview.subviews {
if let textView = view as? UITextField {
return textView
}
}
fatalError("Could not find text field")
}
}
Ответ 10
(Это решение протестировано только для Xcode 10 и iOS 12.) Добавьте расширение для доступа к текстовому полю панели поиска:
extension UISearchBar {
var textField: UITextField? {
return subviews.first?.subviews.compactMap { $0 as? UITextField }.first
}
}
Затем используйте это свойство, чтобы установить цвет текста текстового поля в строке поиска:
let searchBar = UISearchBar()
searchBar.textField?.textColor = UIColor.white // or whichever color you want
Ответ 11
В моей ситуации решение
id appearance = [UITextField appearanceWhenContainedInInstancesOfClasses:@[UISearchBar.class, BCRSidebarController.class]];
[appearance setTextColor:[UIColor.whiteColor colorWithAlphaComponent:0.56]];
Ответ 12
Вот Xamarin.iOS С# версия подхода "найди UITextField". Не произойдет сбой, если UITextField исчезнет в будущей иерархии представления iOS.
var tf = searchBar.AllSubViews().FirstOrDefault(v => v is UITextField);
if (tf != null)
(tf as UITextField).TextColor = UIColor.White;
public static IEnumerable<UIView> AllSubViews(this UIView view)
{
foreach (var v in view.Subviews)
{
yield return v;
foreach (var sv in v.AllSubViews())
{
yield return sv;
}
}
}
Ответ 13
Obj-C
UITextField *textField = [self.yourSearchbar valueForKey:@"_searchField"];
textField.textColor = [UIColor redColor];
Swift 4.x
let textField = yourSearchbar.value(forKey: "searchField") as? UITextField
textField?.textColor = UIColor.red