通过方法创建后标记缺少的属性

时间:2014-07-06 11:41:17

标签: ios xcode uilabel

一直在寻找这个,但我想我做了一些愚蠢的错事。我的第二个屏幕上有很多标签,它们都具有相同的属性。这就是我通过方法创建它们的原因。 在ViewDidLoad中我这样做:

[self screenTwoLabelMaker:firstNameLabel withFrame:CGRectMake(30, 200, 200, 40) withText:@"First Name"];

这个方法就是这个:

- (UILabel *)screenTwoLabelMaker:(UILabel *)sender withFrame:(CGRect)frame withText:(NSString *)text
{
    sender = [[UILabel alloc] init];
    sender.text = text;
    sender.frame = frame;
    sender.font = [UIFont systemFontOfSize:labelFontSize];
    sender.textColor = [UIColor grayColor];
    [self.scrollView addSubview:sender];
    return sender;
}

然后我这样做:

NSLog(@"firstNameLabel x: %f y:%f w:%f h:%f", firstNameLabel.frame.origin.x, firstNameLabel.frame.origin.y, firstNameLabel.frame.size.width, firstNameLabel.frame.size.height);

结果如下:

MyApp[9608:60b] firstNameLabel x: 0.000000 y:0.000000 w:0.000000 h:0.000000

奇怪的是,标签被放在正确位置的屏幕上,文字正确。所以一切都应该是晴天和温暖,不是吗?好吧,我也为按钮调用了一个类似的方法,其中包含一个标签。该标签永远不会在按钮上激活(零),因此对该按钮的进一步编程正在扼杀我。现在我手工制作它们。你们知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

您的方法返回新标签,因此您需要将其分配给要保留引用的变量。您不需要将变量传递给方法,因为您要做的第一件事就是覆盖它。使用以下代码 -

firstNameLabel = [self screenTwoMakeLabelwithFrame:CGRectMake(30, 200, 200, 40) text:@"First Name"];


- (UILabel *)screenTwoMakeLabelwithFrame:(CGRect)frame text:(NSString *)text
{
    UILabel newLabel = [[UILabel alloc] init];
    newLabel.text = text;
    newLabel.frame = frame;
    newLabel.font = [UIFont systemFontOfSize:labelFontSize];
    newLabel.textColor = [UIColor grayColor];
    [self.scrollView addSubview:newLabel];
    return newLabel;
}