从View中删除UILabel的问题

时间:2011-06-03 12:04:10

标签: objective-c ios uilabel

我认为我有一个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];

    }

2 个答案:

答案 0 :(得分:6)

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

确保:

  1. 您获得的label实例是好的
  2. 只有一个label个实例(您可以删除意外插入的副本...)
  3. 调试这类问题的一种非常有效的方法是(我每天都这样做很多次......):

    1. 在删除标签的地方放置一个断点
    2. 当断点命中时,在gdb控制台中输入该命令:

      > po [[self view] recursiveDescription]
      
        

      recursiveDescription会显示[self view]个子视图的树, 地址 以及许多有用的信息,例如坐标...隐藏...那个将允许您清楚地了解该视图中发生的事情。

    3. removeFromSuperview呼叫后,转到下一步,再次播放命令,看看发生了什么变化......或不是。仔细检查对象的地址。

    4. 一般学习gdb和调试,你永远不必再问这些问题了:)

答案 1 :(得分:4)

是单个方法中的所有代码吗?如果是..您正在创建新的startLabelstartLabel2,并尝试在代码的else部分删除它们,但这些不是您作为子视图添加的标签。将标签作为类的成员,并仅在init/viewDidLoad方法中分配一次。