2011-12-19 8 views
7

Interface Builderで30個のボタンが1つのビューに表示されます。各ボタンには100001〜100030の異なるタグがあります。各ボタンに同じアクションを使用し、押されたときにそれぞれのタグを渡し、ロードするレベルを決定するためにコードを使用するのは簡単です。異なるタグを持つ複数のオブジェクトを同じIBOutletに接続できますか?

すべてのボタンを1つのIBOutletに接続したいが、各ボタンに、ユーザーの保存データとボタンのタグに基づいて異なるイメージをロードさせたい。

どうすればよいですか?

答えて

23

使用IBOutletCollectionはこのように、あなたのビューコントローラへの出口コレクションを追加します。

@property (retain, nonatomic) IBOutletCollection(UIButton) NSMutableSet* buttons; 

これは一つの出口にすべてのボタンを接続できます。 buttonsプロパティは、すべてのボタンを含むNSMutableSetになります。ボタンのtagプロパティを使用して、個々のボタンの識別を続けることができます。あなたは、すべてのボタンを反復処理するために、おそらく、各ボタンの画像を設定したい場合に便利です:

for (UIButton *b in self.buttons) { 
    b.imageView.image = [self imageForTag:b.tag]; 
} 

(あなたが指定したタグのための右の画像を提供する-imageForTag:方法を提供する必要があり、または見つけることができますタグから画像にマッピングする方法)

もちろん、すべてのボタンのタグ値の範囲を知っていて、すべてのボタンを含むビュー内でタグをユニークにするように気を付ければ-viewWithTag:を使用して各ボタンを個別に取得することもできます。これはおそらく、前述のコンセントのコレクションと同じように、ボタンのセット全体が既に作成されているのと同じくらい速いわけではありませんが、保守することが少ないことを意味します。

+1

はい、上のスポット!私はちょうどこれを試して、NSLog'ed配列の数、およびボタンを完全に接続...私はこの方法を知っていない唯一のこれは、このボタンの画像を変更するためにこれを使用しています?コード賢明なことは何ですか?ありがとう! –

+0

ボタンのイメージを設定することは、IBOutletCollectionを使用しても、単純に古いIBOutletを使用することと変わりありません。ただし、最初にコレクションから各ボタンを取得する必要があります。私は助けることができる上記の少しのスニペットを追加しました。 – Caleb

+1

ありがとうございました! :D –

0

店舗の配列を作成し、AN IB要素とそれを接続するには、次の手順に従います。

  • 選択のViewController
  • あなたのストーリーボードのViewControllerインタフェースに複数のUIElement(ビュー)を追加IBOutlets
  • の配列を作成します。 (ストーリーボードで)とオープン接続インスペクタ
  • 接続インスペクタには「アウトレットコレクション」オプションがあります(コンセントの配列が表示されます)
  • あなたのインターフェイス要素

であれば接続 -

class ViewController2: UIViewController { 


    @IBOutlet var collection:[UIView]! 


    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

enter image description here

関連する問題