2011-06-03 110 views
1

我有一个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 

    [email protected]"Cannot connect to server."; 
    startLabel.backgroundColor=[UIColor clearColor]; 
    startLabel.textColor=[UIColor whiteColor]; 
    startLabel.font=[UIFont systemFontOfSize:18]; 
    startLabel.tag=1; 

    [self.view addSubview:startLabel]; 



    [email protected]"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]; 

    } 
+1

你确定你提到的函数被调用,你肯定有标签的标签你认为“1”? – 2011-06-03 12:07:04

+1

...你确定你的标签有标签1吗? – Saphrosit 2011-06-03 12:08:58

+0

@WTP和@Saphrosit:是的,我确定函数被调用...并且我有一个带有标签1的标签(我用UILabels的代码更新了我的问题)。 – Ahsan 2011-06-03 12:25:48

回答

4

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

+0

谢谢,它工作得很好...不知道我是如何错过这个..我的坏:( – Ahsan 2011-06-03 12:57:07

6

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

确保:

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

一个非常调试这些类型的问题,有效的方法是(我做了很多次,每天...):

  1. 把一个断点,你要删除的标签
  2. 时遇到断点,在gdb控制台输入命令:

    > po [[self view] recursiveDescription] 
    

    recursiveDescription将显示[self view]子视图树,与地址以及许多有用的信息,如坐标......隐藏......这将使您清楚地理解该视图正在发生的事情。

  3. 转到下一步,在您呼叫removeFromSuperview之后,再次播放命令,并查看是否更改了...或不是。仔细检查对象地址。

了解GDB调试一般来说,你将永远不必再问这些样的问题:)

+0

感谢您的建议,将检查它。:) – Ahsan 2011-06-03 12:57:43

+0

恕我直言,最好知道*如何找到解决方案* “解决方案”... ;) – 2011-06-03 13:04:38