笔尖出口未设置为awakeFromNib

时间:2019-03-06 20:32:37

标签: swift interface-builder xib

我知道这个问题已经问了很多遍了,但是我找不到解决我所面临问题的答案。所以这就是我正在做的。

我为注册表单创建了一个笔尖(RegisterView),表单中的每个文本字段(RoundedTextfield)也是我创建的一个笔尖。我遇到的问题是,调用RegisterView.awakFromNib()时,所有插座都已设置好,但是当我进行配置时,插座的插座不会导致崩溃。我对awakeFromNib的理解是,有一个合理的期望,即在调用awakeFromNib时要设置和初始化所有出口……但是似乎在嵌套的笔尖出口中,孩子的出口是延迟加载,因此在尝试访问它们时导致崩溃。

RegisterView


import UIKit

class RegisterView: UIView {
    @IBOutlet var blurView: UIVisualEffectView!
    @IBOutlet var firstNameField: RoundedTextfield!
    @IBOutlet var lastNameField: RoundedTextfield!
    @IBOutlet var emailField: RoundedTextfield!
    @IBOutlet var passwordField: RoundedTextfield!
    @IBOutlet var confirmPasswordField: RoundedTextfield!
    @IBOutlet var registerButton: ActionButton!

    override func awakeFromNib() {
        super.awakeFromNib()
        blurView.layer.addShadow()
        blurView.layer.roundCorners(radius: 10)

        setupViews()
    }

    func setupViews() {
        firstNameField.label.text = "first name".uppercased()
        lastNameField.label.text = "last name".uppercased()
        emailField.label.text = "email".uppercased()
        passwordField.label.text = "password".uppercased()
        confirmPasswordField.label.text = "confirm password".uppercased()
    }

    class func instanceFromNib() -> RegisterView {
        return UINib(nibName: "RegisterView", bundle: nil).instantiate(withOwner: self, options: nil)[0] as! RegisterView
    }

}

RoundedTextfield

import UIKit

@IBDesignable
class RoundedTextfield: UIView {
    @IBOutlet var label: UILabel!
    @IBOutlet var textField: UITextField!
    @IBOutlet var textFieldCenterY: NSLayoutConstraint!

    @IBInspectable var cornerRadius: CGFloat = 4 {
        didSet {
            layer.cornerRadius = cornerRadius
            layer.masksToBounds = cornerRadius > 0
        }
    }
    @IBInspectable var borderWidth: CGFloat = 0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }
    @IBInspectable var borderColor: UIColor? {
        didSet {
            layer.borderColor = borderColor?.cgColor
        }
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        print("Textfield awoken")
        print(label == nil && textField == nil ? "outlets are not set" : " outlets set")
    }
}

0 个答案:

没有答案