Interface Builder の 1 つのビューに 30 個のボタンがあります。各ボタンには 100001 から 100030 までの異なるタグがあります。各ボタンに同じアクションを使用するのは簡単で、押されたときに各ボタンのタグを渡し、コードを使用してロードするレベルを決定します。
すべてのボタンを 1 つの IBOutlet に接続したいのですが、ユーザーの保存データとボタンのタグに基づいて、各ボタンに異なるイメージをロードさせます。
どうすればいいですか?
Interface Builder の 1 つのビューに 30 個のボタンがあります。各ボタンには 100001 から 100030 までの異なるタグがあります。各ボタンに同じアクションを使用するのは簡単で、押されたときに各ボタンのタグを渡し、コードを使用してロードするレベルを決定します。
すべてのボタンを 1 つの IBOutlet に接続したいのですが、ユーザーの保存データとボタンのタグに基づいて、各ボタンに異なるイメージをロードさせます。
どうすればいいですか?
次のように、IBOutletCollection を使用してアウトレット コレクションをビュー コントローラーに追加します。
@property (retain, nonatomic) IBOutletCollection(UIButton) NSMutableSet* buttons;
これにより、すべてのボタンを 1 つのコンセントに接続できます。プロパティbuttons
は、すべてのボタンを含む NSMutableSet になります。tag
ボタンのプロパティを使用して、個々のボタンを引き続き識別できます。これは、おそらく各ボタンの画像を設定するために、すべてのボタンを反復処理する場合に便利です。
for (UIButton *b in self.buttons) {
b.imageView.image = [self imageForTag:b.tag];
}
(-imageForTag:
特定のタグに適切な画像を提供するメソッドを提供するか、タグから画像にマップする別の方法を見つける必要があります。)
もちろん、すべてのボタンのタグ値の範囲がわかっている場合、およびすべてのボタンを含むビュー内でタグを一意にするように注意している場合は、 を使用して各ボタンを個別にフェッチすることもできます-viewWithTag:
。これはおそらく、上記のアウトレット コレクションの場合のように、ボタンのセット全体を既に作成している場合ほど速くはありませんが、維持するものが 1 つ少なくなることを意味します。