【问题标题】:Change Tint color of CLEAR button inside UISearchBar NOT CANCEL BUTTON更改 UISearchBar 内 CLEAR 按钮的 Tint 颜色 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

【问题讨论】:

标签: ios objective-c uisearchbar uiappearance


【解决方案1】:
UIImage *imgClear = [UIImage imageNamed:@"clear"];
[mySearchBar setImage:imgClear forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];

【讨论】:

  • 可行,但我只想将默认清除按钮的色调更改为白色(因为文本字段的背景颜色很暗)
  • 查看这个答案以获得快速版本:stackoverflow.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 中)
猜你喜欢
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多