我已经制作了一个带有一些插座的自定义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/

10-09 16:26