1

我正在我的 中创建一些UILabelsUIView用数据填充它们,将它们添加到视图中,然后释放它们。

 UILabel *speed = [self scrollLabel:@"some Text" x:455.0f y:75.0f];
 [scrollView addSubview:speed];
 [speed release];

方法:

- (UILabel *)scrollLabel:(NSString *)text x:(float)x_ y:(float)y_ {

 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x_, y_, 300.0f, 20.0f)];
 [label setText:NSLocalizedString(text,@"")];
 [label setFont:[UIFont fontWithName:@"Helvetica" size:14]];
 [label setTextColor:[UIColor colorWithRed:255.0 green:255.0 blue:255.0 alpha:1.9]];
 [label setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0]];

 return label;

}

我有一个按钮,用户可以在其中重新加载 uilabels 的数据。我正在从 superfiew 中删除所有这些标签的父视图,生成新数据并再次执行设置标签的方法。

问题是,旧的 UILabel 仍然存在,所以我的问题是,删除这个特殊标签的最佳方法是什么?

我做了一个循环并删除了所有子视图,问题是,我还有一些其他的子视图,我不想删除。

另一个问题:有没有更好的方法来为多个标签设置字体样式?

4

1 回答 1

1

我建议在特定的 UIView 中添加所有标签,我们称之为 labelHolderView。然后每次你想删除它们时,只需遍历它的所有子节点并调用removeFromSuperview每个子节点。

如果您只想删除特定的 UILabel,请提供有关它们应该是哪些的更多信息。

对于上面的代码,我建议您做一件事:您的- (UILabel *)scrollLabel:(NSString *)text x:(float)x_ y:(float)y_方法应该返回一个自动发布的 UILabel。所以它的最后一行应该是return [label autorelease];. 如果你想返回一个保留的对象,在方法名中添加new/copy/retain,这样你就知道每次调用时返回的对象都被保留了。

因此,您不需要在将标签添加到 UIView 后释放标签。这不会影响您的特定程序,但最好养成这样做的习惯,这样您以后就不会弄乱您的保留/发布。

于 2010-01-28T23:42:17.633 回答