在我的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中数组中的每个元素?
答案 0 :(得分:3)
您可以使用valueForKey:
:
[[self valueForKey:[NSString stringWithFormat:@"title%d", i]] setText:[block getTitle]];
答案 1 :(得分:0)
你应该考虑修改你的逻辑并使其依赖于标记。您可以稍后标记所有子视图,例如subview1.tag = 1001;
subview2.tag = 1002;
,您可以迭代标记值的所有子视图。