1

在我的UIViewController后代中,我有一组四个“块”。每个“块”是一个UIView四个孩子:两个UILabel、一个UIImageView和一个UIView。所有这些都是在界面生成器中创建的,并使用IBOutlet's 连接到类。

在我的班上,我有相应的成员:

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;

我正在动态地将数据设置到这些 UIViews 中 - 它总是一组四个,所以每个块的初始化是相同的。理想情况下,我想做这样的事情:

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]];
}

(请注意,这是简化的代码,在现实生活中,这个初始化还有很多,四个块中的每一个都接近 200 行代码 - 但逻辑完全相同。)现在,如果我只能以某种方式引用一个视图在字符串变量中具有名称!..

有什么办法可以做到这一点?

PS 我知道我可以在代码中将所有这些视图创建为相应视图的数组,但是我也必须在代码中进行布局——我宁愿在 IB 中这样做。或者有什么方法可以将UIViews's 的数组声明为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 回答