2009-06-23 3 views
2

私はview0からview25まで持っています。私は特に25ケースのスイッチを持っているとは思わないので、このようなことをする方法はありますか?同様の名前のコントロールをループする

- (void)modifyViewNumber:(int)number 
{ 
    [view*number* dosomething]; 
} 

答えて

1

ビューを配列に入れ、配列インデックスを使用してビューを参照するのはなぜですか?

- (void)modifyViewNumber:(int)number 
{ 
    UIView* view = [views objectAtIndex:number]; 
    [view dosomething]; 
} 
7

起動時にビューを配列に配置します。

0

ビューの配列を作成します。それぞれを順番に追加し、配列インデックスで参照します。

数字が連続していない場合は、ハッシュテーブルを使用します。

反射が(私はそれが実用的であれば、さえ知らないのObjective Cの第一人者ではないよ)オプションかもしれませんが、遅くなる可能性があります。

0

これらのビューを設定するためにInterface Builderを使用しているとしますか?

誰かがこの上で私を修正する必要があるかもしれないが、私はあなたのクラスでNSArrayのInterface Builderのアウトレットを作成し、そこにすべてのあなたの意見を割り当てることができると信じて。たとえば、 "IBOutlet NSArray * views;を宣言できます。ヘッダーファイルに追加し、インターフェイスビルダーのバインディングを使用して、25個すべてのビューをそのプロパティに関連付けます。それらは自動的に配列に追加され、コード内をきれいに反復することができます。

+0

あなたが正しいなら、あなたは確かにそれに+1する価値があります! – teabot

+2

申し訳ありません - 私は間違っていたようです。 Interface Builderのドキュメントでは、「一度に1つのオブジェクトのみが特定のコンセントに接続されている可能性があります。私は何とかこれをやったことを誓う - だから私は見続けるだろう。しかし、間違った答えを申し訳ありません。 –

+0

ベン、あなたはおそらくあなたの答えを編集してあなたのコメントを追加する方が良いでしょう。 – Abizern

0

のどちらかがコレクションまたはReflectionを使用しています。

3

あなたは、各ビューにタグを入れて、以下の方法でforループを使用することができます

- (id)viewWithTag:(NSInteger)aTag 
1

多くの人々は、配列を使用すると述べている - 私はこのすべての時間を行う、それは本当に唯一の方法ですインターフェイスビルダーを使用するときに行くが、私は少し追加したい。

時々、配列に値を渡すのは難しいことがあります。通常は、画面上のすべてのコントロールの配列を取得する方法があります。通常、私はそれをつかんで、特定の命名パターンでコントロールのタイプを探し、それを自分の配列に集めます。このようにして

、あなたは多くの場合、全くコード変更(私のお気に入りの目標の常に1)で新しいコントロールを追加することができます。

+0

それは私がここでほしいと思うものではありません。 しかし、それは興味深い考えです。どのようにコントロールの配列を取得しましたか? – Walker

+0

Objective-Cではわかりません...すべてのパネルにはgetControls()メソッドがあります。 –

3

まだ誰も提案していませんNSMatrix?これはそれが何のために作られたように聞こえる。

注意点は、ビューはそのようなすべてのテキストフィールドやボタンなどのコントロール、でなければならないということです。基本的には、そのクラス参照を見て、ある時点でNSControlから継承しているかどうかを確認してください。そのテストに合格すると、NSMatrixがオプションになります。

IBのコントロールを作成するには、通常の方法でコントロールの1つを作成し、そのサイズ変更ハンドルをオプションでドラッグします(これは簡単に行うためにthe list of all AppKit classesです)。最初は何もしないように見えますが、引きずり続けます。サイズを変更する代わりに、コントロールが広がります。これは現在、単一のコントロールの代わりにセルのマトリックスになっています。

0

Interface Builderを想定してください。これは私が管理できる最高です:

で。H:.Mで

{ 
    UILabel   *banner[NUM_BANNERS]; 
} 
@property (nonatomic, retain) IBOutlet UILabel *banner0; 
@property (nonatomic, retain) IBOutlet UILabel *banner1; 
@property (nonatomic, retain) IBOutlet UILabel *banner2; 
etc. 

- (void)viewDidLoad 
{ 
    banner[0] = banner0; 
    banner[1] = banner1; 
    banner[2] = banner2; 
    etc. 

そして配列インデックスによってアクセスすることができます。リリースを忘れないでください。