如何在 Swift 中更改 UISearchBar 上的“取消”按钮的颜色

Posted

技术标签:

【中文标题】如何在 Swift 中更改 UISearchBar 上的“取消”按钮的颜色【英文标题】:How to change the colour of the 'Cancel' button on the UISearchBar in Swift 【发布时间】:2016-02-09 21:42:14 【问题描述】:

我在PFQueryTableViewController 的顶部添加了一个UISearchBar。我已将 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)

在情节提要中我设置了这些:

最后,为了使占位符和 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()

        

    


感谢您的帮助! :)

【问题讨论】:

之前取消按钮是什么颜色的? @cbay 这是默认颜色,就像浅灰色/浅灰色 我还没有使用过搜索栏(我所有的 UI 工作都是以编程方式完成的),但是取消按钮的代码在哪里?您应该可以使用 cancelButton.backgroundColor = UIColor.greyColor() 之类的方式更改颜色 我只是在看文档。显示取消按钮默认为 NO。尝试将其设置为“是”。如果可能的话,我找不到在哪里更改它的颜色。 ***.com/questions/19651374/… ***.com/questions/27838084/… 可能会对您有所帮助。 【参考方案1】:

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

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

【讨论】:

如果您使用的是 UISearchController,您必须将此代码插入到 willPresentSearchController:didPresentSearchController: 这会影响应用程序中的其他任何内容还是仅影响取消按钮? @ArthurGarza 它只影响取消按钮 这会影响后退按钮的标题颜色。【参考方案2】:

在代码中使用这一行来改变取消按钮的颜色:

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

使用 Swift 4.0 在 Xcode 9.2 中签入

【讨论】:

完美的胜利。 Xcode 9.4.1、Swift 4.0、ios 11.4.1 只是为了简化一点:... setTitleTextAttributes([.foregroundColor : UIColor.white], for: .normal)【参考方案3】:

基于 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])

【讨论】:

Swift 4 中的相同答案:let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.gray] UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(cancelButtonAttributes, for: .normal)【参考方案4】:

你试过了吗 UISearchBar.appearance().tintColor = UIColor.whiteColor()

【讨论】:

我有,它不会改变文本的颜色。它只是为按钮区域添加了一个微弱的轮廓。 您有可以上传的示例应用程序吗? @DavidYangLiu 它也改变了光标颜色?【参考方案5】:

斯威夫特 4.2

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

【讨论】:

【参考方案6】:

我知道这个问题确实有足够的答案,但这里有一个简单的方法来实现,搜索栏背景颜色和取消按钮背景颜色我们可以直接在情节提要属性检查器中更改它。

用于搜索栏背景颜色

搜索栏取消按钮颜色

【讨论】:

【参考方案7】:

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)

【讨论】:

【参考方案8】:

使用 Swift 4.0 RELEASE 2017-09-19 工具链,这很有效:

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

【讨论】:

【参考方案9】:

你可以简单地设置searchBar的tintcolor来改变Cancel按钮的颜色。这是从 swift 4 开始可用的,所以应该可以解决问题。

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

Search bar cancel button and cursor color change

【讨论】:

【参考方案10】:

斯威夫特 5

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

【讨论】:

【参考方案11】:

以上所有答案都不适合我。 (得到 'Type 'NSAttributedString.Key' (aka 'NSString') has no member 'foregroundColor'' 错误)

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

这是对我有用的稍作修改的代码:-

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

注意:-

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

【讨论】:

【参考方案12】:

Swift 4.2, 4.1

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

【讨论】:

以上是关于如何在 Swift 中更改 UISearchBar 上的“取消”按钮的颜色的主要内容,如果未能解决你的问题,请参考以下文章

更改 UISearchBar 中的 UITextField 高度 - Swift 3

如果单击 UISearchBar,则更改 UITableView 位置:[使用 ModernSearchBar]

swift 扩展到UISEARCHBAR。更改放大玻璃,x按钮和占位符的颜色。

UISearchBar在Swift中完成后如何停止UIActivityIndi​​cator

如何在swift 3中过滤UISearchBar中的数组模型

Swift iOS 8+ UISearchBar图标,占位符和文本居中