旧视图与新视图重叠

时间:2009-06-22 10:52:18

标签: iphone cocoa-touch

我遇到以下问题:

在我的应用程序中,我正在创建一个临时对象,例如以下列方式的标签:

UILabel *tempLabel = [ [UILabel alloc] initWithFrame: CGRectMake(100, 5, 200, 30)];
tempLabel.backgroundColor = [UIColor colorWithRed: 1.0f green: 1.0f blue: 1.0f alpha: 0.0f];
tempLabel.text = [ [WordsDatabase sharedWordsDatabase] dbName];

[ [self view] addSubview: tempLabel];
[tempLabel release];

此代码是从viewWillAppear方法调用的。

当第一次调用视图本身时,一切都很好。但是第二次,新标签似乎与旧标签重叠。

是否有任何步骤可以使这种效果消失? 要添加到viewWillDisappear方法中的东西吗?

我尝试将标签声明添加到类接口和viewWillDisappear方法中以调用[label removeFromSuperview]。在这种情况下,一切都很好。 有没有办法在不存储对标签的引用的情况下完成这项工作?

提前谢谢你。

1 个答案:

答案 0 :(得分:0)

您可以使用sortSubviewsUsingFunction:context:方法对子视图进行排序。 实现此目的的一种方法是向每个子视图添加一个带整数值的标记(UIView的tag属性)。然后,您可以按标签排序(假设标签是数字):

排序功能:

int viewObjectSortByTag(NSControl *firstView, NSControl *secondView, void *context) {
    return ([firstView tag] > [secondView tag]) ? NSOrderedAscending : NSOrderedDescending;
}

添加子视图后,只需对视图进行排序:

[[self view] sortSubviewsUsingFunction:&viewObjectSortByTag context:nil];