我的UITextfield上有一个自动生成的清除按钮,默认为蓝色.我不能把色调改成白色.我try 过修改故事板和代码,但没有成功,我不想使用自定义图像.

如何在不使用自定义图像的情况下更改默认的"清除"按钮色调?

单击

推荐答案

干得好!

一个文本字段.

不使用自定义图像或添加按钮等.

取消按钮带有白色色调的UITextField图像

class TintTextField: UITextField {

     var tintedClearImage: UIImage?

     required init(coder aDecoder: NSCoder) {
       super.init(coder: aDecoder)
       self.setupTintColor()
     }

     override init(frame: CGRect) {
       super.init(frame: frame)
       self.setupTintColor()
     }

     func setupTintColor() {
       self.borderStyle = UITextField.BorderStyle.roundedRect
       self.layer.cornerRadius = 8.0
       self.layer.masksToBounds = true
       self.layer.borderColor = self.tintColor.cgColor
       self.layer.borderWidth = 1.5
       self.backgroundColor = .clear
       self.textColor = self.tintColor
     }

    override func layoutSubviews() {
        super.layoutSubviews()
        self.tintClearImage()
    }

    private func tintClearImage() {
        for view in subviews {
            if view is UIButton {
                let button = view as! UIButton
                if let image = button.image(for: .highlighted) {
                    if self.tintedClearImage == nil {
                        tintedClearImage = self.tintImage(image: image, color: self.tintColor)
                    }
                    button.setImage(self.tintedClearImage, for: .normal)
                    button.setImage(self.tintedClearImage, for: .highlighted)
                }
            }
        }
    }

    private func tintImage(image: UIImage, color: UIColor) -> UIImage {
        let size = image.size

        UIGraphicsBeginImageContextWithOptions(size, false, image.scale)
        let context = UIGraphicsGetCurrentContext()
        image.draw(at: .zero, blendMode: CGBlendMode.normal, alpha: 1.0)

        context?.setFillColor(color.cgColor)
        context?.setBlendMode(CGBlendMode.sourceIn)
        context?.setAlpha(1.0)

        let rect = CGRect(x: CGPoint.zero.x, y: CGPoint.zero.y, width: image.size.width, height: image.size.height)
        UIGraphicsGetCurrentContext()?.fill(rect)
        let tintedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return tintedImage ?? UIImage()
    }
 }

Swift相关问答推荐

什么是Swift Concurrency中任务组的正常退出

如何在visionOS上删除PhotosPicker背景 colored颜色 ?

如何在visionOS中进行购买?&# 39;购买(选项:)在visionOS中不可用

如何让ScrollView缩小到合适的大小,并在没有黑客攻击的情况下占用最小空间

无法创建MKAssociateRegion对象

可以';t在标记为@Observable的类上使用属性包装

快速并行读取进程 standardOutput 和 standardError 而不会阻塞

我如何在 swift 中的 viewdidload 之前进行委托?

根据其属性组合 2 个模型以在 Swift 中创建另一个模型

为什么即使 `C` 是一个不是 `Sendable` 的类,Task` 也能工作?

ConfirmationDialog取消swiftui中的错误

如何删除 macOS 中的所有命令?

SwiftUI View .tint(_ Color) 方法不起作用

我们如何显示关于 UITextField 是 xCode Swift 的建议?

swift 3 错误:参数标签 '(_:)' 不匹配任何可用的重载

使 struct 可散列?

iOS:检测设备是否为 iPhone X 系列(无框)

自动布局:获取 UIImageView 高度以正确计算单元格高度

Swift中字节数组的NSData

Swift 2.0 按属性对对象数组进行排序