我在数组中添加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/

10-10 21:06