首页 > 解决方案 > UIKit - 如何防止 UITextField 的默认模糊和焦点背景?

问题描述

正如您在图像中看到的,UITextField(仅在tvOS?)默认情况下具有以下行为:

按钮默认行为示例

如何删除/更改这些行为?

我做了什么?

查看配置

附加信息

标签: swiftuikittvos

解决方案


实际上,我们总是可以继承 UIKit 类并做任何我们想要的布局/样式。这是如何做到这一点的非常原始的演示。

使用 Xcode 12.1 / tvOS 14.0 准备和测试

演示2

演示3

所以只需替换 UITextField 类的自定义子类

演示1

class MyTextField: UITextField {

    lazy var textLayer = CATextLayer()
    
    override func didMoveToSuperview() {
        super.didMoveToSuperview()
        layer.backgroundColor = UIColor.clear.cgColor

        textLayer.font = self.font
        textLayer.fontSize = 36
        textLayer.foregroundColor = UIColor.white.cgColor
        textLayer.alignmentMode = .center
        textLayer.frame = layer.bounds
        layer.addSublayer(textLayer)
        layer.borderWidth = 2
    }

    override func layoutSublayers(of layer: CALayer) {
        layer.borderColor = self.isFocused ? UIColor.black.cgColor : UIColor.clear.cgColor
        textLayer.frame = layer.bounds
        textLayer.string = self.text?.isEmpty ?? true ? self.placeholder : self.text
    }

    override func addSubview(_ view: UIView) {
        // blocks standard styling
    }

}

推荐阅读