2017-04-11 15 views
0

複数のiboutetsを配列にグループ化しようとしています。これにより、グループ化が可能な場合は、コーディングワークフローが非常に高速になります。アイデアをコード化しようとしましたが、うまくいきません。私がしようとしているのは、let c = partの周りを中心にしています。コードは以下のとおりです。iboutletsを配列に挿入する方法(swift3)

1.アウトレットコレクション

あなたがインターフェイスビルダーを使用している場合は、コンセントをドラッグしたときにアウトレットCollectionオプションを探します。

import UIKit 

class ViewController: UIViewController { 
let c = { 
@IBOutlet var a: UIButton! 

@IBOutlet var b: UIButton! 
} 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

@IBAction func turnOff(_ sender: Any) { 
    c.isHidden = true 

}} 

答えて

3

は、ニーズに応じて、私は3つのオプションを参照してください。ここで

Outlet Collection

手動アウトレットコレクションを作成するための構文です:

@IBOutlet var buttons: [UIButton]! 

今あなたがコレクションに複数のボタンを接続することができます。欠点は、あなたがもはやこのコンセントを介して個々のボタンに簡単にアクセスできないことです。

2.コンピュープロパティ

あなたは簡単にアクセスできるように、個々のコンセントを維持したい場合、私はおそらくコレクションを返す計算されたプロパティを作成します。

@IBOutlet var a: UIButton! 
@IBOutlet var b: UIButton! 
var buttons: [UIButton] { 
    return [a, b] 
} 

3.ビュー階層

レイアウトのニーズに応じて、すべてのボタンを共通の親ビューに配置することができます。親ビューを非表示/非表示にするだけです。あなたはボタンコレクションにisHiddenを使用できない理由は、配列がisHidden性質を持っていないということです。オプション1と2

のためのコレクションを拡張

。配列を繰り返し処理する必要があります(Tom Harringtonはこれをコメントで指摘しました)。これを多く行う必要がある場合は、配列の要素のisHiddenプロパティに転送するメソッドを追加して、ボタンの配列を拡張できます。

extension Sequence where Iterator.Element == UIView { 
    func setHidden(_ hidden: Bool) { 
     for view in self { 
      view.isHidden = hidden 
     } 
    } 
} 

buttons.setHidden(true) 
+0

IはVARボタンを使用して第2の機能を試してみました:[UIButton] { リターン[B] }。問題は、buttons.isHidden = trueが機能しないことです。 –

+0

それは配列なのでです。配列自体ではなく、配列内の各項目で 'isHidden'を変更する必要があります。 –

+0

私は、すべてのボタンをグループ化してisHiddenを効率的にする方法はありますか、それぞれ個別に行う必要があります。 –

0
  1. Stack View内側ボタンを入れて:ここでUIView要素(ボタンのアレイを含む)に制約より一般的なタイプSequenceを拡張するための一例です。

  2. そこからコンセントをドラッグしてください。Stack View

  3. 最後にプロパティをStack Viewに使用できます。

関連する問題