我在数组中添加UIViews。在单击按钮时,我将它们添加到另一个视图。完美运作。
问题是,当我在数组中多次添加视图时。该视图仅设置一次。
这是我的代码。
-(IBAction)buttonClick:(id)sender {
UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
view1.backgroundColor = [UIColor redColor];
UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
[view2 setBackgroundColor:[UIColor orangeColor]];
UIView *view3 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
[view3 setBackgroundColor:[UIColor greenColor]];
UIView *view4 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
[view4 setBackgroundColor:[UIColor blueColor]];
NSArray *views = [NSArray arrayWithObjects:view2, view2, view1, view4, view3, nil];
[self setViews:views];
}
-(void) setViews:(NSArray*)views {
[testView1 addSubview: [views objectAtIndex:0]];
[testView2 addSubview: [views objectAtIndex:1]];
[testView3 addSubview: [views objectAtIndex:2]];
[testView4 addSubview: [views objectAtIndex:3]];
[testView5 addSubview: [views objectAtIndex:4]];
}
输出是
对于
NSArray *views = [NSArray arrayWithObjects:view1, view2, view4, view4, view3, nil];
,输出为对于
NSArray *views = [NSArray arrayWithObjects:view1, view2, view3, view4, view4, nil];
,输出为我说得更清楚了。对于
[NSArray arrayWithObjects:view1, view1, view1, view1, view1, nil];
,testView1,2,3,4为空,并将view1
添加到testView5
中。无论添加视图多少次,如何都能带来完美的输出?
我想听听您的解释。
最佳答案
从Apple docs
视图只能有一个 super 视图。如果视图已经具有一个 super 视图并且该视图不是接收者,则此方法会在使接收者成为其新的 super 视图之前删除先前的 super 视图。
这意味着,多次调用addSubview
以添加相同的子视图只会在 super 视图上添加一次(因为接收者将是相同的)。
解决方案:您将需要复制要重复作为子视图的视图的多个副本。
希望有帮助!
关于iphone - 数组中缺少UIView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19175203/