从View更新/删除UILables

时间:2010-01-28 23:09:31

标签: iphone objective-c uiview uilabel

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

 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仍然存在,所以我的问题是,删除这个特殊标签的最佳方法是什么?

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

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

1 个答案:

答案 0 :(得分:1)

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

如果您只想删除特定的UILabel,请提供更多信息以确定它们应该是什么。

我建议您使用上面的代码:您的- (UILabel *)scrollLabel:(NSString *)text x:(float)x_ y:(float)y_方法应返回自动释放的UILabel。所以它的最后一行应该是return [label autorelease];。如果要返回保留的对象,请在方法的名称中添加new / copy / retain,以便您知道每次调用时都会保留返回的对象。

因此,在将标签添加到UIView后,您无需释放标签。这不会影响你的具体程序,但养成这样做的习惯是好的,这样你就不会在将来弄乱你的保留/发布。