子视图删除并添加目标c / iphone

时间:2009-09-30 10:38:52

标签: objective-c

我有一个UIViewController类,我在其中创建一个UIView实例。 然后我用25个子视图初始化(表示填充)它,每个子视图包含一个图像(1,2,...,25)。然后在这些图像中点击5次后,我调用了一个我用过的函数

for(UIView *subview in [contentView subviews]) {
    [subview removeFromSuperview];//ContentView name of my view
}

删除以前添加的子视图。然后我使用相同的approch 添加25个新的子视图(图像1,2,3,...... 25)。但这次没有添加子视图。 有人可以给我完整的代码添加&删除子视图。

首次添加子视图时,我使用了以下代码

//create main window

contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
contentView.backgroundColor = [UIColor blackColor];
self.view = contentView;
[contentView release];

//adding 25 subview 1st time
int a=0;
int b=0;
for (int i = 0; i < 26; i++)
{

    CGRect dragRect = CGRectMake(0.0f, 0.0f, x, y);
    dragRect.origin = CGPointMake(a,b);
    DragView *dragger = [[DragView alloc] initWithFrame:dragRect];
    NSString *Flower = [[NSArray arrayWithObjects:@"1.png", @"2.png", @"3.png",@"4.png", @"5.png", @"6.png",@"7.png",@"8.png", @"9.png",@"10.png", @"11.png", @"12.png",@"13.png",@"14.png",@"15.png",@"16.png",@"17.png",@"18.png",@"19.png",@"20.png",@"21.png",@"22.png",@"23.png",@"24.png",@"25.png",@"26.png", nil] objectAtIndex:i];
    [dragger setImage:[UIImage imageNamed:Flower]];
    [dragger setUserInteractionEnabled:YES];
    [self.view addSubview:dragger];
    [dragger release];
    a+=10;
    b+=10;
}

//then removing 25 subview

//adding 25 subview 2nd times

我使用相同的approch第一次添加第二次,但问题是当我删除25个子视图然后添加25个子视图时,这些子视图未添加/显示,视图保持不变。我厌倦了这些问题。有人帮助我。

3 个答案:

答案 0 :(得分:10)

问题可能在于删除旧视图的方式。您正在迭代它时修改数组,这不起作用。尝试使用此代码删除旧视图:

UIView* subview;
while ((subview = [[contentView subviews] lastObject]) != nil)
    [subview removeFromSuperview];

答案 1 :(得分:1)

漂亮的衬垫是:

[view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

答案 2 :(得分:0)

查看您的代码,我可以建议以下更改。你的for循环中有一行非常低效:

NSString *Flower = [[NSArray arrayWithObjects:@"1.png", @"2.png", @"3.png",@"4.png", @"5.png", @"6.png",@"7.png",@"8.png", @"9.png",@"10.png", @"11.png", @"12.png",@"13.png",@"14.png",@"15.png",@"16.png",@"17.png",@"18.png",@"19.png",@"20.png",@"21.png",@"22.png",@"23.png",@"24.png",@"25.png",@"26.png", nil] objectAtIndex:i];
[dragger setImage:[UIImage imageNamed:Flower]];

Flower初始化从for循环中取出(仅创建一次数组)或执行以下操作:

[dragger setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.png", i]]];

代码本身看起来应该可以工作。如果添加26个子视图,则删除26个子视图,然后在完全中添加26个子视图,就像它应该显示的那样。