方法不返回UILabel的新实例

时间:2012-02-11 18:56:30

标签: objective-c uilabel

方法声明,

-(UILabel *)returnUILabel:(UILabel *)myLabel color:(UIColor *)labelColor x:(int)xParameter     y:(int)yParamater width:(int)widthParameter height:(int)heightParameter
{
    CGRect cellFrame = CGRectMake(xParameter, yParamater, widthParameter, heightParameter);
    myLabel = [myLabel initWithFrame:cellFrame];
    myLabel.text = @"Testing";
    myLabel.shadowOffset = CGSizeMake(1,1);
    myLabel.backgroundColor = labelColor;
    return myLabel;
}

在viewDidLoad中调用如下,

UILabel *myLabel = [[UILabel alloc] init];
UIColor *labelColor = [UIColor redColor];

[self.view addSubview:[self returnUILabel:myLabel color:labelColor x:17 y:260 width:140 height:130]];
labelColor = [UIColor yellowColor] ;
[self.view addSubview:[self returnUILabel:myLabel color:labelColor x:170 y:260 width:140 height:130]];
[super viewDidLoad];  

在我看来,我只看到黄色标签,而我应该看到一个红色和一个黄色。为什么?? 同样的方法适用于UIImageView

由于

2 个答案:

答案 0 :(得分:1)

问题在于,您只有一个 UILabel对象,并且您将其作为子视图添加两次。这不会复制标签。

来自UIView reference

  

视图只能有一个超级视图。如果视图已经具有超视图并且该视图不是接收者,则此方法会在使接收器成为新的超级视图之前删除先前的超视图。

作为推论,如果superview是相同的,添加已经添加的子视图将简单地将其置于所有其他视图之上。

答案 1 :(得分:1)

您只有一个UILabel,您所做的就是修改该标签,而不是创建标签的新实例

- (UILabel *)returnUILabelWithColor:(UIColor *)labelColor x:(int)xParameter y:(int)yParamater width:(int)widthParameter height:(int)heightParameter
{
    CGRect cellFrame = CGRectMake(xParameter, yParamater, widthParameter, heightParameter);
    UILabel* newLabel = [[[UILabel alloc] initWithFrame:cellFrame] autorelease];
    newLabel.text = @"Testing";
    newLabel.shadowOffset = CGSizeMake(1,1);
    newLabel.backgroundColor = labelColor;
    return newLabel;
}