Я понимаю, что этот вопрос задавался много раз, но я не могу найти ответ, который решает проблему, с которой я сталкиваюсь. Итак, вот что у меня происходит.
Я создал перо (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")
}
}