如何在视图上放置“x”个对象

时间:2012-06-20 19:34:24

标签: objective-c ios

如果用户提供了一个数字,例如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。你有什么想法?你明白我在问什么吗?谢谢你的帮助。

3 个答案:

答案 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的参考。