我有一个滚动视图,我在其中添加了多个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没有被删除。你能帮忙吗?
答案 0 :(得分:0)
看起来您将标签添加为imageView的子视图,但尝试删除标签的代码循环遍历[[sender superview] subviews]
- 这是imageView的父视图的子视图。尝试将代码更改为循环遍历[sender subviews]
。
答案 1 :(得分:0)
您也在泄漏那些UIImageView和UIButton对象。你分配/初始化它们将保留计数设置为1,然后将它们添加为子视图,将保留计数设置为2.当释放包含它们的父视图时,它将这些视图释放到保留计数为1,但从不删除他们。您应该在首次创建时对它们执行alloc / init / autorelease,或者在将它们添加为子视图后释放它们以解决此问题。