从View中删除UILabel的问题

Ahs*_*san 1 objective-c uilabel ios

我认为我有一个UILabel.如果正在调用某个函数,我想删除UILabel.我尝试了几种方法,但它不起作用!

代码尝试:

[[self.view viewWithTag:1] setHidden:YES]; 
Run Code Online (Sandbox Code Playgroud)

要么

label.hidden=YES;
Run Code Online (Sandbox Code Playgroud)

要么

[label removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有这些代码,但无济于事.我有点让我知道我在这里失踪了吗?谢谢.

我的代码的其他部分:

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];

    }
Run Code Online (Sandbox Code Playgroud)

Vin*_*rci 6

您列出的所有方法都有效.所以我担心你没有在正确的地方搜索你的bug.

确保:

  1. label你得到的实例是好的
  2. 只有一个label实例(你可以删除你不小心插入的副本......)

调试这类问题的一种非常有效的方法是(我每天都这样做很多次......):

  1. 在断开标签处放置断点
  2. 当断点命中时,在gdb控制台中输入该命令:

    > po [[self view] recursiveDescription]
    
    Run Code Online (Sandbox Code Playgroud)

    recursiveDescription将显示一个[self view]子视图树,其中包含地址和许多有用的信息,如坐标......隐藏...这将使您能够清楚地了解该视图中发生了什么.

  3. 转到下一步,removeFromSuperview打电话后,再次播放命令,然后看看改变了什么...... 仔细检查对象的地址.

一般学习gdb和调试,你再也不用问这些问题:)