如何删除UILabel的子视图

时间:2011-05-09 15:21:02

标签: objective-c ios uilabel

我有一个滚动视图,我在其中添加了多个UIImageview。

对于每个图像视图,我添加了一个UIButton和一个UILabel。

现在我要删除UILabel视图。

请查看下面的代码

 - (void)viewDidLoad {
    [super viewDidLoad];

    int h;
    for (h=0; h<3; h++) {
    UIImageView *k=[[UIImageView alloc]initWithFrame:CGRectMake(h*40, 0, 60, 90)];
    k.backgroundColor=[UIColor yellowColor];
    k.tag=h;

    UIButton *j=[[UIButton alloc]initWithFrame:CGRectMake(20, 20, 20, 20)];
    [j addTarget:self action:@selector(ge:) forControlEvents: UIControlEventTouchUpInside];
    j.backgroundColor=[UIColor redColor];
    [k addSubview:j];
    k.userInteractionEnabled=YES;
    [self.view addSubview:k];

    }

}

这里我只是添加一个图像视图和一个按钮。如果标签存在,请删除UILabel,否则添加UILabel

用户点击按钮后

-(IBAction)ge:(id)sender{


    UIImageView *imageView = (UIImageView *)[sender superview];
    for (UIView *jkl in [[sender superview]subviews]) {
        if ([jkl isKindOfClass:[UILabel class]]){ 
            [jkl removeFromSuperview];


        } else {
            UILabel *y=[[UILabel alloc]initWithFrame:CGRectMake(20, 20, 20, 20)];

            y.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Close.jpeg"]];
            [imageView addSubview:y];
        }

    }

}

但是UILabel没有被删除。你能帮忙吗?

2 个答案:

答案 0 :(得分:0)

看起来您将标签添加为imageView的子视图,但尝试删除标签的代码循环遍历[[sender superview] subviews] - 这是imageView的父视图的子视图。尝试将代码更改为循环遍历[sender subviews]

答案 1 :(得分:0)

您也在泄漏那些UIImageView和UIButton对象。你分配/初始化它们将保留计数设置为1,然后将它们添加为子视图,将保留计数设置为2.当释放包含它们的父视图时,它将这些视图释放到保留计数为1,但从不删除他们。您应该在首次创建时对它们执行alloc / init / autorelease,或者在将它们添加为子视图后释放它们以解决此问题。

相关问题