我在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仍然存在,所以我的问题是,删除这个特殊标签的最佳方法是什么?
我做了一个循环并删除了所有子视图,问题是,我还有其他一些子视图,我不想删除。
另一个问题:是否有更好的方法为多个标签设置字体样式?
答案 0 :(得分:1)
我建议在特定的UIView中添加所有标签,我们称之为labelHolderView。然后,每次要删除它们时,只需遍历其所有子项,并为每个子项调用removeFromSuperview
。
如果您只想删除特定的UILabel,请提供更多信息以确定它们应该是什么。
我建议您使用上面的代码:您的- (UILabel *)scrollLabel:(NSString *)text x:(float)x_ y:(float)y_
方法应返回自动释放的UILabel。所以它的最后一行应该是return [label autorelease];
。如果要返回保留的对象,请在方法的名称中添加new / copy / retain,以便您知道每次调用时都会保留返回的对象。
因此,在将标签添加到UIView后,您无需释放标签。这不会影响你的具体程序,但养成这样做的习惯是好的,这样你就不会在将来弄乱你的保留/发布。