如何用viewWithTag隐藏UILabel?

时间:2013-07-25 06:01:11

标签: iphone ios objective-c tags uilabel

我想隐藏UILabel,但我无法隐藏我的标签在ViewDidLoad之外或“在ViewDidLoad内但在for循环之外”。在for循环中的ViewDidLoad中,我可以实现我想要的。我可以用标签隐藏标签。但是在循环之外它没有用。

这就是我在做的事情。请看看。

-(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

}

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

6 个答案:

答案 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];
        }
    }

它适用于你。

答案 1 :(得分:1)

尝试使用这个..

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

答案 2 :(得分:1)

它不起作用,因为它超出了具有有效内存的lbl的范围定义。[在if循环中你正在分配它并因此当有标记10的lbl存在时有有效内存]

在这里,您必须从superview获取标签,即self.view,然后使用它

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

然后将其隐藏为

label.hidden=YES;

编辑:viewWithTag:0问题

这是因为self.view具有标记值为0的所有视图,因为默认标记值为0.您应该做的是检查天气返回的视图是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;
}

答案 3 :(得分:1)

 [lbl viewWithTag:12].hidden = YES;

它没有为循环而工作,对于循环lbl的外侧等于nil,你不能直接访问标签,就像这个[lbl viewWithTag:12].hidden = YES;一样,使用标识符来访问这样的标签

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

答案 4 :(得分:1)

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

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

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

请确保您在此处提供正确的标签父母。

答案 5 :(得分:0)

您正在使用以下代码

[lbl viewWithTag:12].hidden = YES;

声音不正确,因为viewWithTag函数返回接收者层次结构中的tag属性与tag参数中的值匹配的视图。

在两个宫殿中尝试如下(进入或离开循环)。

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