1

私のUIViewController子孫には、4 つの「ブロック」のセットがあります。各「ブロック」はUIView4 つの子です: two UILabel、 one UIImageView、および one UIView。これらはすべてインターフェイス ビルダーで作成され、 を使用してクラスに接続されますIBOutlet

私のクラスには、対応するメンバーがいます:

IBOutlet UIView      *block1;
IBOutlet UILabel     *title1;
IBOutlet UILabel     *text1;
IBOutlet UIImageView *image1;
IBOutlet UIView      *separator1;

IBOutlet UIView      *block2;
IBOutlet UILabel     *title2;
IBOutlet UILabel     *text2;
IBOutlet UIImageView *image2;
IBOutlet UIView      *separator2;

IBOutlet UIView      *block3;
IBOutlet UILabel     *title3;
IBOutlet UILabel     *text3;
IBOutlet UIImageView *image3;
IBOutlet UIView      *separator3;

IBOutlet UIView      *block4;
IBOutlet UILabel     *title4;
IBOutlet UILabel     *text4;
IBOutlet UIImageView *image4;
IBOutlet UIView      *separator4;

これらの UIView に動的に設定するデータを取得しています。これは常に 4 つのセットであるため、各ブロックの初期化は同じです。理想的には、次のようなことをしたいと思います。

Block *block;
UIImage *img;

for(int i=1; i<=4; i++)
{
    block = [response blockNumbered:i];

    [<"title"+i> setText:[block getTitle]];
    [<"text"+i> setText:[block getText]];
    img = [block getImage];
    if(img)
    {
        [<"image"+i> setImage:img];
    }

    [<"separator"+i> setHidden:![block needSeparator]];
}

(これは単純化されたコードであることに注意してください。実際には、この初期化にはさらに多くのことがあり、4 つのブロックのそれぞれに 200 行近くのコードがありますが、ロジックはまったく同じです。)文字列変数に名前を持っています!..

これを達成する方法はありますか?

PS コード内でこれらすべてのビューを対応するビューの配列として作成できることはわかっていますが、その場合はコード内でレイアウトも行う必要があります。UIViewsまたは、 の配列をas として宣言し、配列IBOutlet内の各要素を IB で接続する方法はありますか?

4

2 に答える 2

3

使用できますvalueForKey:

[[self valueForKey:[NSString stringWithFormat:@"title%d", i]] setText:[block getTitle]];
于 2012-05-24T11:12:00.267 に答える
0

ロジックを少し変更して、タグ付けに依存させることを検討する必要があります。subview1.tag = 1001; subview2.tag = 1002;後でタグ値ですべてのサブビューを反復できるように、すべてのサブビューにタグを付けることができます。

于 2012-05-24T11:10:34.123 に答える