如何更改'取消'的颜色? Swift中

时间:2016-02-09 21:42:15

标签: ios swift uisearchbar

我在UISearchBar的顶部添加了PFQueryTableViewController。我已经将searchBar的颜色更改为我的应用程序的颜色,但在这样做时,它似乎也改变了'取消'按钮右侧的颜色相同。理想情况下,我希望颜色为白色。

此图显示目前的情况:

看起来没有'取消'按钮,但有,它只是与searchBar相同的颜色(你仍然可以按它等)

我有办法将此“取消”按钮的颜色更改为白色吗?我尝试过的所有东西似乎没什么区别。

用于制作UISearchBar此颜色的代码是:

UISearchBar.appearance().barTintColor = UIColor(hue: 359/360, saturation: 67/100, brightness: 71/100, alpha: 1)
UISearchBar.appearance().tintColor = UIColor(hue: 359/360, saturation: 67/100, brightness: 71/100, alpha: 1)

在故事板中,我设置了这些:

enter image description here

最后,为了使占位符和文本在SearchBar中显示为白色,我已经使用了:

for subView in self.filmSearchBar.subviews {

    for subsubView in subView.subviews {

        if let searchBarTextField = subsubView as? UITextField {

            searchBarTextField.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("Search Cinevu film reviews", comment: ""), attributes: [NSForegroundColorAttributeName: UIColor.whiteColor()])

            searchBarTextField.textColor = UIColor.whiteColor()

        }

    }

}

感谢您的帮助! :)

12 个答案:

答案 0 :(得分:23)

环顾四周,这似乎是实现我所需要的最佳方式:

 let cancelButtonAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
 UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes , for: .normal)

答案 1 :(得分:11)

在代码中使用此单行更改取消按钮的颜色:

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue): UIColor.white], for: .normal)

使用Swift 4.0检查Xcode 9.2

答案 2 :(得分:10)

基于Nick89的代码,我改变了类似于Swift 3.1

let cancelButtonAttributes: [String: AnyObject] = [NSForegroundColorAttributeName: UIColor.white]

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(cancelButtonAttributes, for: .normal)

我只想更改UISearchBar而不是所有UIBarButton,所以我使用UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self])

答案 3 :(得分:7)

你尝试过吗?     UISearchBar.appearance()。tintColor = UIColor.whiteColor()

答案 4 :(得分:5)

Swift 4.2

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.black], for: .normal)

答案 5 :(得分:3)

Swift 4.2版本,基于其他答案:

let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key(rawValue: NSAttributedString.Key.foregroundColor.rawValue): UIColor.orange]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(cancelButtonAttributes, for: .normal)

答案 6 :(得分:3)

使用Swift 4.0 RELEASE 2017-09-19工具链,此方法有效:

    let cancelButtonAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(cancelButtonAttributes, for: .normal)

答案 7 :(得分:1)

我知道这个问题确实有足够的答案但是这里有简单的实现方法,SearchBar背景颜色和取消按钮背景颜色我们可以在故事板属性检查器中直接更改它。

用于SearchBar背景颜色

enter image description here

用于SearchBar取消按钮颜色

enter image description here

答案 8 :(得分:1)

快捷键5

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([.foregroundColor : UIColor.barTint], for: .normal)

答案 9 :(得分:0)

以上所有答案均不适用于我。 (“ Type'NSAttributedString.Key”(也称为“ NSString”)没有成员“ foregroundColor”错误)

也许是因为我在Swift 3上...

以下是对我有用的稍微修改的代码:-

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSForegroundColorAttributeName : .black], for: .normal)

注意:-

如果您使用的是UISearchController,请将此代码插入“ willPresentSearchController:”或“ didPresentSearchController:”

答案 10 :(得分:0)

您只需设置searchBar的 tintcolor 即可更改“取消”按钮的颜色。自swift 4起可用,因此应该可以解决问题。

let searchBar = UISearchBar(frame: )
searchBar.tintColor = .orange

Search bar cancel button and cursor color change

答案 11 :(得分:-1)

Swift 4.2、4.1

添加了here的自定义类可用于自定义searchBar中最常见的元素。自定义类SearchBar可以导致出现在以下搜索栏中。

enter image description here