如何调用 IBOutlet 元素的初始值设定项?
How do you call an IBOutlet element's initializer?
我写了 UITextField 的以下子class:
var imageView: UIButton? = nil
var options: [String]? = nil
let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 30)
override init(frame: CGRect) {
super.init(frame:frame)
self.backgroundColor = Constants.darkPurple
self.textColor = .white
self.layer.cornerRadius = 10
self.clipsToBounds = true
self.translatesAutoresizingMaskIntoConstraints = false
self.tintColor = .clear
Constants.styleDropDownField(self)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//fatalError("init(coder:) has not been implemented")
}
}
当我以编程方式添加此 class 的实例时,它工作正常。但是,当我在故事板中添加 class 的实例,然后将其与 IBAction 连接时,它只是一个空白的白色文本字段,没有我在 class 的初始化程序中分配的任何属性 - 它似乎根本没有调用初始化程序。有什么方法可以调用元素的初始化器吗?或者是否有另一个类似于 viewDidLoad 的函数,它会在加载文本字段时 运行?
您不能调用故事板中添加的组件的初始化程序。但你正朝着正确的方向前进。创建一个通用方法来设置这些属性。
func commonSetup() {
self.backgroundColor = Constants.darkPurple
self.textColor = .white
self.layer.cornerRadius = 10
self.clipsToBounds = true
self.translatesAutoresizingMaskIntoConstraints = false
self.tintColor = .clear
Constants.styleDropDownField(self)
}
并从三种不同的方法中调用此方法
override func awakeFromNib() {
super.awakeFromNib()
self.commonSetup()
}
override init(frame: CGRect) {
super.init(frame:frame)
self.commonSetup()
}
//This method will be called when component is initialised from storyboard.
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.commonSetup()
}
您必须在 init(coder:)
中调用 init(frame:)
中给出的实现,因为从情节提要中使用时会调用此方法。这是代码:
override init(frame: CGRect) {
super.init(frame:frame)
initialSetup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialSetup()
}
func initialSetup() {
self.backgroundColor = Constants.darkPurple
self.textColor = .white
self.layer.cornerRadius = 10
self.clipsToBounds = true
self.translatesAutoresizingMaskIntoConstraints = false
self.tintColor = .clear
Constants.styleDropDownField(self)
}
我写了 UITextField 的以下子class:
var imageView: UIButton? = nil
var options: [String]? = nil
let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 30)
override init(frame: CGRect) {
super.init(frame:frame)
self.backgroundColor = Constants.darkPurple
self.textColor = .white
self.layer.cornerRadius = 10
self.clipsToBounds = true
self.translatesAutoresizingMaskIntoConstraints = false
self.tintColor = .clear
Constants.styleDropDownField(self)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//fatalError("init(coder:) has not been implemented")
}
}
当我以编程方式添加此 class 的实例时,它工作正常。但是,当我在故事板中添加 class 的实例,然后将其与 IBAction 连接时,它只是一个空白的白色文本字段,没有我在 class 的初始化程序中分配的任何属性 - 它似乎根本没有调用初始化程序。有什么方法可以调用元素的初始化器吗?或者是否有另一个类似于 viewDidLoad 的函数,它会在加载文本字段时 运行?
您不能调用故事板中添加的组件的初始化程序。但你正朝着正确的方向前进。创建一个通用方法来设置这些属性。
func commonSetup() {
self.backgroundColor = Constants.darkPurple
self.textColor = .white
self.layer.cornerRadius = 10
self.clipsToBounds = true
self.translatesAutoresizingMaskIntoConstraints = false
self.tintColor = .clear
Constants.styleDropDownField(self)
}
并从三种不同的方法中调用此方法
override func awakeFromNib() {
super.awakeFromNib()
self.commonSetup()
}
override init(frame: CGRect) {
super.init(frame:frame)
self.commonSetup()
}
//This method will be called when component is initialised from storyboard.
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.commonSetup()
}
您必须在 init(coder:)
中调用 init(frame:)
中给出的实现,因为从情节提要中使用时会调用此方法。这是代码:
override init(frame: CGRect) {
super.init(frame:frame)
initialSetup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialSetup()
}
func initialSetup() {
self.backgroundColor = Constants.darkPurple
self.textColor = .white
self.layer.cornerRadius = 10
self.clipsToBounds = true
self.translatesAutoresizingMaskIntoConstraints = false
self.tintColor = .clear
Constants.styleDropDownField(self)
}