我认为我有一个UILabel。如果正在调用某个函数,我想删除UILabel。我尝试了几种方法,但它不起作用!
尝试了代码:
[[self.view viewWithTag:1] setHidden:YES];
或
label.hidden=YES;
或
[label removeFromSuperview];
我已尝试过所有这些代码,但无济于事。我有点让我知道我在这里失踪了吗?感谢。
我的代码的其他部分:
UILabel *startLabel=[[[UILabel alloc] initWithFrame:CGRectMake(55, 45, 300, 30)] autorelease];
UILabel *startLabel2=[[[UILabel alloc] initWithFrame:CGRectMake(40, 65, 300, 30)] autorelease];
if ((internetActive==NO)||(hostActive==NO)) {
status=1;
//add the label
startLabel.text=@"Cannot connect to server.";
startLabel.backgroundColor=[UIColor clearColor];
startLabel.textColor=[UIColor whiteColor];
startLabel.font=[UIFont systemFontOfSize:18];
startLabel.tag=1;
[self.view addSubview:startLabel];
startLabel2.text=@"Please check your connection.";
startLabel2.backgroundColor=[UIColor clearColor];
startLabel2.textColor=[UIColor whiteColor];
startLabel2.font=[UIFont systemFontOfSize:18];
startLabel2.tag=2;
[self.view addSubview:startLabel2];
startLabel.hidden=NO;
startLabel2.hidden=NO;
}
else if ((internetActive==YES) &&(hostActive==YES))
{
if(status==1)
{
//[startLabel removeFromSuperview];
//[startLabel2 removeFromSuperview];
//[[self.view viewWithTag:1] setHidden:YES];
//[[self.view viewWithTag:2] setHidden:YES];
NSLog(@"INSIDE!");
startLabel.hidden=YES;
startLabel2.hidden=YES;
[startLabel removeFromSuperview];
[startLabel2 removeFromSuperview];
}
答案 0 :(得分:6)
您列出的所有方法都有效。所以我担心你没有在正确的地方搜索你的bug。
确保:
label
实例是好的label
个实例(您可以删除意外插入的副本...)调试这类问题的一种非常有效的方法是(我每天都这样做很多次......):
当断点命中时,在gdb
控制台中输入该命令:
> po [[self view] recursiveDescription]
recursiveDescription
会显示[self view]
个子视图的树, 地址 以及许多有用的信息,例如坐标...隐藏...那个将允许您清楚地了解该视图中发生的事情。
在removeFromSuperview
呼叫后,转到下一步,再次播放命令,看看发生了什么变化......或不是。仔细检查对象的地址。
一般学习gdb和调试,你永远不必再问这些问题了:)
答案 1 :(得分:4)
是单个方法中的所有代码吗?如果是..您正在创建新的startLabel
和startLabel2
,并尝试在代码的else
部分删除它们,但这些不是您作为子视图添加的标签。将标签作为类的成员,并仅在init/viewDidLoad
方法中分配一次。