0

我想隐藏 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

}

任何想法或建议都将受到高度欢迎。

4

6 回答 6

1

viewWithTag:有时表现出意料之外。(如果您的视图有分层子视图)

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

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

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

于 2013-07-25T06:25:27.053 回答
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];
        }
    }

它会为你工作。

于 2013-07-25T06:02:14.857 回答
1

试试用这个..

UILabel *label = (UILabel *)[self.view viewWithTag:12];
label.hidden = YES;
于 2013-07-25T06:03:46.693 回答
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;
}
于 2013-07-25T06:07:15.847 回答
1
 [lbl viewWithTag:12].hidden = YES;

它在 for 循环的一侧不起作用,在循环的一侧 lbl 等于 nil,您不能直接访问标签,像这样[lbl viewWithTag:12].hidden = YES;,使用标识符来访问像这样的标签

UILabel *label = (UILabel *)[self.view viewWithTag:12];
于 2013-07-25T06:12:23.937 回答
0

您正在使用以下代码

[lbl viewWithTag:12].hidden = YES;

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

在两个宫殿中尝试如下(循环内或循环外)。

UILabel *label = [self.view viewWithTag:12];
label.hidded = YES;
于 2013-07-25T06:10:29.103 回答