以编程方式在swift中的viewDidLoad之前向数组添加按钮

时间:2017-12-31 10:47:09

标签: ios swift

使用情节提要时,您可以在其上绘制2个按钮,然后通过创建添加然后将它们添加到数组中:

@IBOutlet private var cardButtons: [UIButton]!

此出口集合现在是两个按钮的数组,在viewDidLoad之前作为变量加载。

如何在不使用故事板的情况下以编程方式创建此按钮数组?

我试过这个,但它给了我一个声明错误:

class ViewController: UIViewController {
    var cardButtons = [CardView]()
    let cardOne = CardView()
    cardButtons.append(cardOne)

    ...rest of viewController standard class
}

2 个答案:

答案 0 :(得分:1)

在ViewController的生命周期中有几个时间点,您可能需要填充cardButtons数组。例如,您可以在viewDidLoad中执行此操作。

class ViewController: UIViewController {
    var cardButtons = [CardView]()

    override func viewDidLoad() {
        super.viewDidLoad()

        let cardOne = CardView()
        cardButtons.append(cardOne)
    }
}

请记住,每次将View加载到内存时都会调用viewDidLoad。在我的示例中,每次都会重新创建cardOne。为避免这种情况,您可以将cardOne存储在实例var中,就像最初一样。

class ViewController: UIViewController {
    var cardButtons = [CardView]()
    let cardOne = CardView()

    override func viewDidLoad() {
        super.viewDidLoad()
        cardButtons.append(cardOne)
    }
}

正如我所说,在ViewController的生命周期中有几个时间点你可能想要填充cardButtons数组。其他功能可能是:

  • viewDidAppear(),每当视图出现时填充该区域。
  • init(),如果您根本不使用故事板。

答案 1 :(得分:0)

这是我最终做的事情:

class ViewController: UIViewController {
    let uiView: UI = {
        var ui:UI = UI()
        let cardOne = CardView()
        let cardTwo = CardView()
        ui.addButton(item: cardOne)
        ui.addButton(item: cardTwo)
        return ui
    }()
...rest of viewController standard class
}

class UI {
    var cardButtons = [CardView]()

    func addButton(button: CardView){
        cardButtons.append(button)
    }
}