我已经制作了一个带有一些插座的自定义UIView XIB文件。我希望能够以编程方式从代码中的其他位置加载它。我在xib中使用自动布局。我的问题是我需要使用参数值对其进行初始化以满足委托方法。我不确定如何在初始化期间传递参数。我也不太了解整个init(frame :) vs init(coder :)以及便捷的init在这里如何工作。有什么建议吗?
背景:目前,整个视图在Obj-C中是程序化的,我正迅速将其移植到XIB。
最佳答案
有很多不同的方法来处理视图的初始化。您可以创建一个静态函数来为您完成所有工作。这是避免覆盖init方法的一种方法。
class TestView: UIView {
var delegate: Any!
static func instantiate(with delegate: Any) -> TestView {
let nib = UINib(nibName: "TestView", bundle: nil)
guard let testView = nib.instantiate(withOwner: nil)[0] as? TestView else {
fatalError("Attempted to create TestView, failed to find object")
}
testView.delegate = delegate
return testView
}
}
然后,执行以下操作以创建视图
let testView = TestView.instantiate(with:mydelegate)
关于swift - 如何从XIB将值传递到UIView初始化程序中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54451440/