使用输入参数初始化Xib

时间:2018-08-01 11:49:40

标签: ios swift xib

我正在尝试做一个简单的控件来模拟我可以在xcode界面设计器中使用的“ android选项卡”。

因此,我制作了一个简单的XIB,它没有几个接口对象(滚动,堆栈,uiview ...),并给了他一个名为“ TabsCustomControl”的类

我现在的问题是知道如何设置/初始化此xib / UIView类。

在我看来,在xib / custom UIView初始化时将参数传递给xib / custom UIView是有意义的,以便它根据选项卡的数量知道选项卡应具有的大小/颜色/图像。

但是我马上跑

let tabsCustomControl = Bundle.main.loadNibNamed("TabsCustomControl", owner: self, options: nil)!.first as! TabsCustomControl

我没有机会进行配置

tabsCustomControl.tabs = ["first tab"]

它运行init ...,但我仍未使用选项卡列表[String]定义该属性,所以现在发生的是代码运行时没有任何关于选项卡的信息。

@IBInspectable var tabs : [String] = []

override init(frame: CGRect) {
    super.init(frame: frame)
    setup()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setup()
}

private func setup()
{       
     // THIS IS Empty, so loop is not running
    for _ in tabs {

        let newTab = UIButton()
        newTab.backgroundColor = UIColor.green
        newTab.setTitle("Test", for: .normal)

        horizontalStackView.addArrangedSubview(newTab)
    }
}

我可以通过在初始化类和设置参数后运行setup()函数来解决此问题,但这似乎很糟糕,因为我将在很多地方使用它...每次都会被我调用.setup()困扰在创建XIB之后

我应该使用哪种方法?

1 个答案:

答案 0 :(得分:1)

也许可以在didSet中运行安装程序

@IBInspectable var tabs : [String] = [] {
    didSet {
        setup()
    }

这意味着您必须确保在初始化VC之后确实设置了选项卡