如果用户提供了一个数字,例如8,我究竟会如何在视图上放置八个标签?
例如:
int userGivenNumber = textfield.text;
for (int labelNumber=1; i<=userGivenNumber; i++) {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, *previousLabel*.frame.origin.y + 20)];
}
您如何获得previousLabel
的位置?此外,如果用户想要编辑标签,例如标签3,我该如何编辑此标签?
问题是我不知道他们想要在编码时放置多少标签,我无法跟踪标签,因为它们被称为label
。你有什么想法?你明白我在问什么吗?谢谢你的帮助。
答案 0 :(得分:3)
- (void)addLabels {
CGFloat offset = 0;
// labels is NSMutableArray property
labels = [[NSMutableArray alloc] initWithCapacity:8];
for (int i = 0; i < 8; i++) {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, offset, 320, 20)];
[self.view addSubview:label];
[labels addObject:label];
offset += label.frame.size.height;
}
}
编辑像jerrylroberts所说,要从代码中的其他位置访问标签数组,您应该将其声明为属性。
答案 1 :(得分:1)
所以你可以像这样添加视图:
int userGivenNumber = [textfield.text intValue];
for (int labelNumber=1; i<=userGivenNumber; i++) {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, *previousLabel*.frame.origin.y + 20)];
[self.view addSubview:label];
[label release];
}
如果你想跟踪它们,你可以创建一个可变数组作为属性,然后在添加到子视图之前将每个标签添加到数组中;
<强>接口强>
@property (nonatomic, retain) NSMutableArray *addedLabels;
<强>实施强>
@synthesize addedLabels=_addedLabels;
- (void)viewDidLoad
[super viewDidLoad];
// Create your array to hold labels
NSMutableArray *addedLabels = [[NSMutableArray alloc] initWithCapacity:0];
self.addedLabels = addedLabels;
[addedLabels release];
// NOW put your code
int userGivenNumber = [textfield.text intValue];
for (int labelNumber=1; i<=userGivenNumber; i++) {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, *previousLabel*.frame.origin.y + 20)];
[self.view addSubview:label];
[addedLabels addObject:label];
[label release];
}
}
现在,如果您拥有索引,则可以轻松访问已添加的任何标签。希望这有帮助
答案 2 :(得分:0)
只需在循环外部保留对位置(CGPoint)的引用,但在循环内将其更新为当前标签的位置。分配下一帧时,根据标签的宽度和大小进行操作,不要忘记更新CGPoint的参考。