2013-07-25 28 views
0

我想隐藏UILabel,但我无法将标签隐藏在ViewDidLoad之外或“ViewDidLoad内部但for循环之外”。在for循环中的ViewDidLoad中,我可以实现我想要的。我可以用标签隐藏标签。但是在循环之外它不起作用。如何用viewWithTag隐藏UILabel?

这就是我正在做的。请看一看。

-(void)ViewDidLoad{ 
int lbl_Pos_X = 580; 

for (j=0; j<30; j++) { 

    lbl = [[UILabel alloc ] initWithFrame:CGRectMake(lbl_Pos_X, 21, 7, 15)]; 
    lbl.backgroundColor = [UIColor redColor]; 
    lbl.tag = j; 
    [self.view addSubview:lbl]; 
    //[lbl release]; 

    lbl_Pos_X = lbl_Pos_X + 5; 


    [lbl viewWithTag:10].hidden = YES; // here working 
    } 

    [lbl viewWithTag:12].hidden = YES; // here Not working 

} 

任何想法或建议将非常受欢迎。

回答

0

您使用下面的代码

[lbl viewWithTag:12].hidden = YES; 

这听起来不正确,因为viewWithTag函数返回接收器的层次结构,其标签属性的值相匹配的视图标签参数..

在两个宫殿(循环内或循环外)尝试下面的内容。

UILabel *label = [self.view viewWithTag:12]; 
label.hidded = YES; 
+0

我想使用此代码,但只适用于一个标签,这可能吗? for(UIView * subview in self.view.subviews){ if([subview isKindOfClass:[UILabel class]] { subview.hidden = YES; } –

+0

是的,您可以使用但在if条件替换条件为 if(XX == [_ label1 tag])其中XX =您想要隐藏标签的标签号。因为看起来你有多个UILabels,而你想隐藏特定的一个,但是如果你想隐藏所有的UILabel,那么你的代码就可以正常工作。 – Suryakant

+0

如果我给viewWithTag:0,那么我的所有ipad页面都隐藏了。所有的屏幕将变成白色。如果我给viewWithTag:1,那么没问题,但lbl.tag = 0;变得可见。 –

1

您可以从其添加了它的超级查看中访问您的标签。

这种替换代码:

[self.view viewWithTag:12].hidden = YES; 

编辑:如果你需要隐藏只有一个特定的标记标签,然后使用此:

for (UIView *view in self.view.subviews) { 
     if ([view isKindOfClass:[UILabel class]] && (view.tag == 12)) { 
      [view setHidden:YES]; 
     } 
    } 

它会为你工作。

+0

它说表达式是不可转让的。 –

+0

立即检查。我已经提出了UILabel类型转换。这是由于类型化 –

+0

如果我给viewWithTag:0,那么我的所有ipad页面都隐藏了。所有的屏幕将变成白色。如果我给viewWithTag:1,那么没问题,但lbl.tag = 0;变得可见。 –

1

尝试使用这一个..

UILabel *label = (UILabel *)[self.view viewWithTag:12]; 
label.hidden = YES; 
+0

如果我给viewWithTag:0,那么我的所有ipad页面都隐藏起来了。所有的屏幕将变成白色。如果我给viewWithTag:1,那么没问题,但lbl.tag = 0;变得可见。 –

+0

工作正常。非常感谢主席先生。 –

+0

提到不是亲爱的对不起,迟到回复..... –

1

它不工作,因为它不与有效的内存LBL的范围定义的。[如果内环路您allocing它,因此具有有效的内存时,LBL与标签10存在有]

在这里,你必须得到来自上海华标签,即self.view然后用它

UILabel *label = (UILabel *)[self.view viewWithTag:12]; 

,然后隐藏它为

label.hidden=YES; 

编辑:viewWithTag:0问题

这是因为self.view具有标记值0所有的意见,因为默认标签值为0.What你应该做的是检查天气返回的观点是的UILabel和tehn使其隐藏,或为循环中的所有标签设置唯一的标签值更改循环语句

解决方案:另一种方式 保留具有所有标签引用的数组,您可以在任何需要的地方使用它后来。 声明

NSMutableArray *labelArray; 
在viewDidLoad中

{ 
    labelArray=[[NSMutableArray alloc]initWithCapacity:10]; 
    int lbl_Pos_X=0; 

    for (int j=0; j<30; j++) { 

     UILabel* lbl = [[UILabel alloc ] initWithFrame:CGRectMake(lbl_Pos_X, 21, 7, 15)]; 
     lbl.backgroundColor = [UIColor redColor]; 
     lbl.tag = j; 
     [self.view addSubview:lbl]; 
     [labelArray addObject:lbl]; 
     //[lbl release]; 

     lbl_Pos_X = lbl_Pos_X + 5; 


     [lbl viewWithTag:10].hidden = YES; // here working 
    } 

    UILabel *label=[labelArray objectAtIndex:15]; 
    label.hidden=YES; 
} 
+0

如果我给viewWithTag:0,那么我所有的ipad页面都隐藏起来了。所有的屏幕将变成白色。如果我给viewWithTag:1,那么没问题,但lbl.tag = 0;变得可见。 –

+0

@NishaSingh:试试这个 –

+0

工作正常。非常感谢先生.... –

1
[lbl viewWithTag:12].hidden = YES; 

它不工作的循环边,出边的循环LBL是等于零,你不能直接访问的标签,这样,使用的标识符来访问标签,这样

UILabel *label = (UILabel *)[self.view viewWithTag:12]; 
+0

如果我给viewWithTag:0,那么我所有的ipad页面被隐藏。所有的屏幕将变成白色。如果我给viewWithTag:1,那么没问题,但lbl.tag = 0;变得可见。 –

+0

工作正常。非常感谢先生.... –

1

viewWithTag:有时会表现出意外。 (如果您查看有分层子视图)

要摆脱这种情况,最好做这样的事情。

for (UIView *subview in parentViewOfLabel) 
{ 
    if ([subview isKindOfClass:[UILabel class]] && [subview tag]==12) 
     subview.hidden = YES;   
} 

确保你在这里给出正确的标签父母。

+0

工作正常。非常感谢。 –

+0

@NishaSingh URW :) –

+0

您应该在隐藏标签后“断开”环路。 – TheTiger