如何在iphone中访问动态创建的uilabel

时间:2013-03-05 12:13:15

标签: ios objective-c

我创建了带有标记值的动态UILabel,我有类似的其他标签没有标记值。

现在我只想访问标签值标签,但我无法访问标签文本值。

这是我的代码。

 Dynamic created Label
     for (int i= 0; i < [array count]; i++) {
        UILabel *defaultLbl = [[UILabel alloc] initWithFrame:CGRectMake(30, 70, 60, 21)];
        defaultLbl.text = @"Default";
        defaultLbl.backgroundColor = [UIColor clearColor];
        defaultLbl.textColor = [UIColor colorWithRed:51.0/255.0 green:51.0/255.0 blue:51.0/255.0 alpha:1.0];
        [defaultLbl setFont:[UIFont fontWithName:@"Helvetica" size:12]];
        defaultLbl.textAlignment = NSTextAlignmentCenter;
        defaultLbl.tag = i+1;
        [myButton addSubview:defaultLbl];
        [defaultLbl release];

        UILabel *masterProName = [[UILabel alloc] initWithFrame:CGRectMake(28, 20, 200, 21)];
        masterProName.text = [masterProjListArray objectAtIndex:i];//@"Lorem Ipusum";
        masterProName.backgroundColor = [UIColor clearColor];
        masterProName.textColor = [UIColor colorWithRed:51.0/255.0 green:153.0/255.0 blue:204.0/255.0 alpha:1.0];
        [masterProName setFont:[UIFont fontWithName:@"Helvetica-Bold" size:17]];
        masterProName.lineBreakMode = NSLineBreakByCharWrapping;
        [myButton addSubview:masterProName];
        [masterProName release];

        UILabel *masterProID = [[UILabel alloc] initWithFrame:CGRectMake(28, 45, 200, 21)];
        masterProID.text = [masterProjIDArray objectAtIndex:i];//@"133 FS";
        masterProID.backgroundColor = [UIColor clearColor];
        masterProID.textColor = [UIColor colorWithRed:51.0/255.0 green:51.0/255.0 blue:51.0/255.0 alpha:1.0];;
        [masterProID setFont:[UIFont fontWithName:@"Helvetica" size:17]];
        masterProID.lineBreakMode = NSLineBreakByCharWrapping;
        [myButton addSubview:masterProID];
        [masterProID release];
    }

用户按下长按按钮后的UILabel访问方法

- (void)longPressTap:(UILongPressGestureRecognizer *)sender
         {
          if ([recognizer.view tag]) {
                        UILabel *view = (UILabel *)recognizer.view;
                    NSLog(@"---%@", view.subviews);

                    for (UILabel *lbl in view.subviews) {
                        if (recognizer.view.tag == view.tag) {
                            NSString *text = view.text;
                            NSLog(@"---%@", text);
                        }
                    }
            }
        }

这里放日志

"<UIImageView: 0x75b9510; frame = (0 0; 379 100); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x75acef0>>",
            "<UILabel: 0x88c4e50; frame = (28 20; 200 21); text = 'Aux Water Waste Trtmnt'; clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x88c49c0>>",
            "<UILabel: 0x88c52f0; frame = (28 45; 200 21); text = 'M10000'; clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x88c5380>>",
            "<UILabel: 0x88c56c0; frame = (30 70; 60 21); text = '**Default**'; clipsToBounds = YES; userInteractionEnabled = NO; tag = 1; layer = <CALayer: 0x88c5750>>",
            "<UIButton: 0x88c6440; frame = (240 10; 70 80); opaque = NO; userInteractionEnabled = NO; tag = 1; layer = <CALayer: 0x88c6500>>"

在此日志中,我只想访问“默认”文本标签

请给我任何建议。

5 个答案:

答案 0 :(得分:1)

好吧,你需要知道标签中标签的值与文本中的“默认”一致。我们假设它是42.然后

UILabel *label = [view viewWithTag:42];

会做到这一点。 无论如何,你的解决方案也应该有效查看您正在处理的实际标记值。我有一种胆量,认为识别器.view.tag与标签中带有“默认”的标签没有相同的值。

答案 1 :(得分:1)

您还可以在运行时创建那些插座。

创建一个数组,然后继续添加每个标签的出口。

完成后需要检索它们,您可以通过数组索引轻松访问。

即使您可以创建用于存储插座的字典,也可以在此处按键访问标签。

答案 2 :(得分:0)

当您为UILabel分配标记时,我们可以从标记中获取标签(如果我们知道,在您知道的情况下我们知道)。

所以试试这种方式

    for (int i = 0 ; i <[array count]; i++)
    {
        UILabel *lbl = (UILabel*)[self.view viewWithTag:i+1];
        NSLog(@"--- %@", lbl.text);
    }

答案 3 :(得分:0)

UILabel为基础获取Tag

int i;中取.h file, 并将i=1;放在 for Loop

之上
for (NSObject *view in self.View.subviews) 
{
    if ([view isKindOfClass:[UILabel class]]) 
    {
        label = (UILabel *)[[self view] viewWithTag:i];
        NSLof(@"%@".label.text);
       // break;
    }
  i++;
}

答案 4 :(得分:0)

首先,你应该检查

 if (lbl.tag == view.tag)

if (recognizer.view.tag == view.tag)

其次,它无论如何都行不通。所有这一切都是确定您所知道的被触摸的视图。如何将标签中的标签值设置为您想要的唯一编号并进行测试

if (lbl.tag == <unique tag number>)