如何更改 UITextFields 默认边框颜色

时间:2020-12-23 08:56:33

标签: ios swift uikit

如何为视图出现时未聚焦的 UITextField 设置默认边框颜色?尝试过没有成功:

class UITextFieldCustom : UITextField, UITextFieldDelegate {

    init(frame: CGRect, size: CGFloat) {
        super.init(frame: frame)
        
        self.layer.borderColor = UIColor.gray.cgColor
    }
    
    required init?(coder aDecoder: NSCoder) {
           super.init(coder: aDecoder)
       }
    

4 个答案:

答案 0 :(得分:1)

如果看不到新边框,请尝试增加其宽度:

layer.borderWidth = 2.0

答案 1 :(得分:1)

您面临的问题是未调用 self.layer.borderColor = UIColor.gray.cgColor,因为未调用函数 init(frame: CGRect, size: CGFloat)。不调用的原因是你的文本框没有在你的代码中初始化,例如:

func createTextField() -> UITextfield {
     return UITextfield(frame: .zero, size: 100.0)
}

您的文本字段是从故事板初始化的。这就是另一个 init 函数 required init?(coder aDecoder: NSCoder) 存在的原因。 sotryboard 调用此函数来初始化文本字段。

要解决这个问题,你只需要将你的边框修改行添加到另一个 init 函数中,就像这样:

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.layer.borderColor = UIColor.gray.cgColor
}

虽然我更喜欢另一种干净的方法,是将所有设置代码添加到 viewDidLoad 方法中,以获得清晰的概述,如下所示:

class ViewController: UIViewController {
    
    // MARK: - Properties
    @IBOutlet weak var textfield: UITextfield!
    
    // MARK: - View's Lifecycle
    override func viewDidLoad {
        super.viewDidLoad()
        setupTextfield()
    }
    
    // MARK: - Setup
    private func setupTextfield() {
        textfield.layer.borderColor = UIColor.gray.cgColor
    }
}

答案 2 :(得分:0)

把你的代码也放在这里,你可能不会从故事板或笔尖调用它。

required init?(coder aDecoder: NSCoder) {
       super.init(coder: aDecoder)
       self.layer.borderColor = UIColor.gray.cgColor
 }

答案 3 :(得分:0)

使用@IBDesignable 类来创建边框颜色并设置宽度,就像这个例子一样。

import UIKit
@IBDesignable
class BorderTextField: UITextField {

    @IBInspectable var borderColor: UIColor = UIColor.white{
        didSet{
                layer.borderColor = borderColor.cgColor
        }
    }
    @IBInspectable var borderWidth: CGFloat = 0 {
        didSet{
            layer.borderWidth = borderWidth
        }
    }
}

您可以根据需要在 storyboard 中设置值。