方法声明,
-(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
。
由于
答案 0 :(得分:1)
问题在于,您只有一个 UILabel
对象,并且您将其作为子视图添加两次。这不会复制标签。
视图只能有一个超级视图。如果视图已经具有超视图并且该视图不是接收者,则此方法会在使接收器成为新的超级视图之前删除先前的超视图。
作为推论,如果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;
}