在变量中按名称引用UIView

时间:2012-05-24 11:06:45

标签: iphone variables uiview

在我的UIViewController后裔中,我有一组四个“块”。每个“块”是UIView四个孩子:两个UILabel,一个UIImageView和一个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中 - 并且它总是在一组四个中,因此每个块的初始化是相同的。理想情况下,我想做这样的事情:

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行代码 - 但逻辑完全相同。)现在,如果我只能以某种方式引用到具有字符串变量名称的视图!..

有没有办法实现这个目标?

P.S。我知道我可以在代码中创建所有这些视图作为相应视图的数组,但是我必须在代码中进行布局 - 我宁愿在IB中执行此操作。或者有没有办法将UIViews的数组声明为IBOutlet并连接IB中数组中的每个元素?

2 个答案:

答案 0 :(得分:3)

您可以使用valueForKey:

[[self valueForKey:[NSString stringWithFormat:@"title%d", i]] setText:[block getTitle]];

答案 1 :(得分:0)

你应该考虑修改你的逻辑并使其依赖于标记。您可以稍后标记所有子视图,例如subview1.tag = 1001; subview2.tag = 1002;,您可以迭代标记值的所有子视图。