更改UISearchBar textColor无法正常工作

时间:2016-06-11 11:18:40

标签: google-maps uisearchbar google-places-api uiappearance

我正在使用google places API for autoComplete小部件。我正在使用swift在ios 9+中显示全屏控制。我正在添加文档中给出的完整控件。

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

所以我试过这个

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

但我没有得到理想的行为。以下是截图

**enter image description here**

这已在Docs

中给出

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

但这不起作用。对此我需要帮助。

6 个答案:

答案 0 :(得分:8)

您需要创建一个类似于follwoing的扩展程序:

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())

输出是:

enter image description here

<强>更新

对于GMSAutocompleteViewController的searchBar文本的更改颜色,您需要执行以下代码:

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

将文字更改为如下图所示:

enter image description here

如果您希望更改占位符文字及其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

它将显示如下:

enter image description here

答案 1 :(得分:4)

使用 Swift 3

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

希望这有帮助。

答案 2 :(得分:1)

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

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

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

您可以应用此示例代码:

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

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

我希望能涵盖您的问题。快乐的编码!

答案 3 :(得分:0)

对于Swift 4 iOS 12

"%string%"

答案 4 :(得分:0)

迅速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

答案 5 :(得分:0)

这实际上非常简单,只需访问searchBar内的textField即可:

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