访问以编程方式创建的UILabel

时间:2010-08-09 08:07:04

标签: iphone cocoa-touch

好我的问题:

我有创建标签的功能:

- (void)crateBall:(NSInteger *)nummer {
  UILabel *BallNummer = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 100)];
  BallNummer.text = [NSString stringWithFormat:@"%i", nummer];
  [self.view addSubview:BallNummer];
}

现在我想在其他功能中访问标签以更改文本,框架等。

这些标签的数量是动态的,所以我不想在.h文件中声明每个标签。 (我不是指数字.text = 123我的意思是视图中的标签数量)

2 个答案:

答案 0 :(得分:4)

为了您的目的,所有UIView子类都具有整数tag属性

- (void)crateBall:(NSInteger *)nummer {
  UILabel *BallNummer = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 100)];
  BallNummer.text = [NSString stringWithFormat:@"%i", nummer];
  BallNummer.tag = *nummer;
  [self.view addSubview:BallNummer];
  [BallNummer release];
}

稍后您可以使用-viewWithTag:函数获取此标签:

UILabel *ballNummer = (UILabel*)[self.view viewWithTag:nummer];

P.S。当你将指向int的指针传递给你的函数时(你真的需要这样做吗?)你应该在使用它之前取消引用它:

BallNummer.text = [NSString stringWithFormat:@"%i", *nummer];

P.P.S。不要忘记发布标签你的创建(我已经将代码添加到我的代码中) - 你的代码泄漏内存

答案 1 :(得分:0)

您可以使用UIView'标签属性标记您的子视图,并创建一个功能来访问您之后的标签

- (void)createLabels {
  UILabel *label;

  label = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 100)];
  label.tag = 1;
  [self.view addSubview:label];

  label = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 100)];
  label.tag = 2;
  [self.view addSubview:label];

  //etc...
}

-(UILabel*) getLabel:(NSInteger) index {
    return [self.view viewWithTag:index];
}