Выход Nib не установлен на пробуждении от Nib - PullRequest
0 голосов
/ 06 марта 2019

Я понимаю, что этот вопрос задавался много раз, но я не могу найти ответ, который решает проблему, с которой я сталкиваюсь. Итак, вот что у меня происходит.

Я создал перо (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")
    }
}
...