2017-12-31 79 views
3

でのviewDidLoad前に、アレイにボタンを追加:プログラムストーリーボードを使用している場合、あなたはその上に2つのボタンを描画し、作成することによって、アレイにそれらを追加し追加することができます迅速

@IBOutlet private var cardButtons: [UIButton]! 

この出口コレクションは今のアレイであります変数としてviewDidLoadの前にロードされる両方のボタンの

ストーリーボードを使用せずに、このボタンの配列をプログラムで作成するにはどうすればよいですか?

私はこれを試してみたが、それは私の宣言エラーを与える:

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

    ...rest of viewController standard class 
} 
+0

シングルトンを使用し、AppDelegateを介してそれらをロードします。 –

答えて

1

ありますがcardButtons配列を埋めるために必要かもしれないのViewControllerのライフサイクルの時間のいくつかのポイントを。たとえば、viewDidLoadでこれを行うことができます。

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

    override func viewDidLoad() { 
     super.viewDidLoad() 

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

ビューがメモリにロードされるたびにviewDidLoadが呼び出されることに注意してください。私の例では、cardOneはいつも再現されます。これを避けるには、最初に行ったのと同じように、インスタンスのvarにcardOneを格納することができます。

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

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

私が言ったように、そこにあなたがcardButtons配列を埋めるために必要かもしれないのViewControllerのライフサイクルの時間のいくつかのポイント。他の機能は:

  • viewDidAppear()です。ビューが表示されるたびに領域を埋めることができます。
  • init()、ストーリーボードをまったく使用していない場合。ここで
+0

完璧なおかげさまで - 私はそれを提案と少し違うようにしましたが、これが私を助けました! –

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) 
    } 
} 
関連する問題

 関連する問題