一直在寻找这个,但我想我做了一些愚蠢的错事。我的第二个屏幕上有很多标签,它们都具有相同的属性。这就是我通过方法创建它们的原因。 在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
奇怪的是,标签被放在正确位置的屏幕上,文字正确。所以一切都应该是晴天和温暖,不是吗?好吧,我也为按钮调用了一个类似的方法,其中包含一个标签。该标签永远不会在按钮上激活(零),因此对该按钮的进一步编程正在扼杀我。现在我手工制作它们。你们知道我做错了吗?
答案 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;
}