更改 UISearchBar 内 CLEAR 按钮的 Tint 颜色 NOT CANCEL BUTTON

Posted

技术标签:

【中文标题】更改 UISearchBar 内 CLEAR 按钮的 Tint 颜色 NOT CANCEL BUTTON【英文标题】:Change Tint color of CLEAR button inside UISearchBar NOT CANCEL BUTTON 【发布时间】:2016-05-25 11:10:42 【问题描述】:

我想自定义 UISearchBar 内的取消按钮,当用户输入文本时出现,清除文本,查看图像,我想更改红色方块内按钮的色调颜色而不是带有“取消”文本的按钮

我尝试过的:

[[UIButton appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:[UIColor redColor]];

但它会改变按钮的颜色,文本“取消”而不是图标以清除文本字段内的文本

这不是一个重复的问题,因为我想更改默认清晰图像的色调,而不是使用自定义图像,类似这样:

How to change the tint color of the clear button on a UITextField

但对于 UISearchBar

【问题讨论】:

***.com/questions/13862050/… 可能重复 检查这个问题***.com/questions/1200149/… 我说的是清除按钮红色方块的按钮 我也遇到了同样的问题,清除按钮颜色没有改变。 【参考方案1】:
UIImage *imgClear = [UIImage imageNamed:@"clear"];
[mySearchBar setImage:imgClear forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];

【讨论】:

可行,但我只想将默认清除按钮的色调更改为白色(因为文本字段的背景颜色很暗) 查看这个答案以获得快速版本:***.com/a/52257939/3400939【参考方案2】:

Swift4.2、4.1+

似乎currentImagenil for clearButton from Swift 4.1+。它可能适用于旧版本。

所以我创建了这个类,这里​​的补充是为clearbutton提供你自己的图像和颜色。

class SearchBar: UISearchBar 

    var clearButtonImage: UIImage?
    var clearButtonColor: UIColor = .white

    override func layoutSubviews() 
        super.layoutSubviews()

        if let textField = self.value(forKey: "searchField") as? UITextField 
            if let clearButton = textField.value(forKey: "clearButton") as? UIButton 
                update(button: clearButton, image: self.clearButtonImage, color: clearButtonColor)
            
        
    

    private func update(button: UIButton, image: UIImage?, color: UIColor) 
        let image = (image ?? button.currentImage)?.withRenderingMode(.alwaysTemplate)
        button.setImage(image, for: .normal)
        button.setImage(image, for: .highlighted)
        button.tintColor = color
    

所以现在您可以如下设置clearButton 图像以使其工作,

let searchBar = SearchBar()
searchBar.clearButtonImage = UIImage(named: "clearIcon")
searchBar.clearButtonColor = .green

故事板或 XIB

您必须将SearchBar 类设置为custom class 以获取如下所示的搜索栏,

outlet如下设置图像和颜色等

@IBOutlet private weak var searchBar: SearchBar!

【讨论】:

它为 nil 的原因是因为您需要至少输入一次内容才能将其加载到内存中。所以你也需要在第一次编辑时更新它(或者像你一样,在 layoutSubviews 中)

以上是关于更改 UISearchBar 内 CLEAR 按钮的 Tint 颜色 NOT CANCEL BUTTON的主要内容,如果未能解决你的问题,请参考以下文章

如何在iOS7中更改UISearchBar的取消按钮的textColor?

更改UIsearchbar 的背景和cancel按钮(转)

在 iOS 8 中更改 UISearchBar 取消按钮文本

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

动态更改 UISearchBar 的键盘类型

使用 Monotouch 在 UISearchBar 上更改“取消”按钮的文本?