更改 UISearchBar textColor 不起作用

Posted

技术标签:

【中文标题】更改 UISearchBar textColor 不起作用【英文标题】:Change UISearchBar textColor not working 【发布时间】:2016-06-11 11:18:40 【问题描述】:

我正在使用 Google Places API 来实现自动完成小部件。我正在使用 swift 在 ios 9+ 中显示全屏控件。我正在添加文档中给出的完整控件。

我已经添加了文档中显示的代码。现在我想将 searchBar 文本颜色更改为 whiteColor。

所以我尝试了这个

UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).textColor = UIColor.whiteColor()

但我没有得到想要的行为。下面是截图

这已在文档中给出

https://developers.google.com/places/ios-api/autocomplete#use_a_table_data_source

但这不起作用。我需要这方面的帮助。

【问题讨论】:

解释所需的输出和您遇到的错误 如果可能的话,最好详细说明问题并附上快照,否则很难得到准确的解决方案。 【参考方案1】:

你需要创建一个如下扩展:

public extension UISearchBar 

    public func setNewcolor(color: UIColor) 
        let clrChange = subviews.flatMap  $0.subviews 
        guard let sc = (clrChange.filter  $0 is UITextField ).first as? UITextField else  return 
        sc.textColor = color
    

并使用以下代码更改颜色:

 controller.searchBar.setNewcolor(UIColor.redColor())

输出是:

更新:

要更改GMSAutocompleteViewController 的搜索栏文本颜色,您需要执行以下代码:

let searchBarTextAttributes: [String : AnyObject] = [NSForegroundColorAttributeName: UIColor.redColor(), NSFontAttributeName: UIFont.systemFontOfSize(UIFont.systemFontSize())]
UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).defaultTextAttributes = searchBarTextAttributes

改变文字输出如下图:

如果您想更改占位符文本和searchBar 的颜色。您需要执行以下代码:

let placeholderAttributes: [String : AnyObject] = [NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName: UIFont.systemFontOfSize(UIFont.systemFontSize())]

let attributedPlaceholder: NSAttributedString = NSAttributedString(string: "Find a place", attributes: placeholderAttributes)
UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).attributedPlaceholder = attributedPlaceholder

它会显示如下:

【讨论】:

【参考方案2】:

使用 Swift 3

的波纹管代码
if #available(iOS 9.0, *) 
  UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSForegroundColorAttributeName: UIColor.green]
   else 
  // Fallback on earlier versions

希望这会有所帮助。

【讨论】:

【参考方案3】:

适用于 swift 4 ios 12

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes
            .updateValue(UIColor.white, forKey: NSAttributedStringKey.foregroundColor.rawValue)

【讨论】:

【参考方案4】:

您可以使用UIAppearance protocol 获取iOS 5.0 及更高版本中可用的类的外观代理。

实际上有两种方法可以自定义对象的外观和获取类的外观代理。

要自定义类的所有实例的外观,请使用appearance。 要自定义包含在容器类实例或层次结构中的实例的类实例的外观,请使用appearanceWhenContainedIn

您可以应用此示例代码:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@NSForegroundColorAttributeName:[UIColor redColor]];

您还可以尝试此 SO 帖子中提供的另一个选项 - UISearchBar text color change in iOS 7。

我希望这涵盖了您的问题。编码愉快!

【讨论】:

它不包括我的问题。我正在使用 swift,在 swift 中我们不能使用 defaulttext 属性。【参考方案5】:

在 Swift 5 中:

let searchBarTextAttributes: [NSAttributedString.Key : AnyObject] = [NSAttributedString.Key(rawValue: NSAttributedString.Key.foregroundColor.rawValue): UIColor.red, NSAttributedString.Key(rawValue: NSAttributedString.Key.font.rawValue): UIFont.systemFont(ofSize: 14.0)]

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = searchBarTextAttributes

【讨论】:

【参考方案6】:

这其实很简单,只要访问 searchBar 里面的 textField 就可以了:

searchBar.searchTextField.defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.red]

【讨论】:

以上是关于更改 UISearchBar textColor 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在iOS 7中更改文本UISearchBar的取消按钮颜色?

更改 ListView 的 textcolor

在 Swift 中更改 UITextView 的 textColor

Flutter 更改 FlatButton textColor

更改自定义 ListView 的 textcolor

如何在qt中更改textcolor编辑器