gpt4 book ai didi

objective-c - 尝试通过快速枚举 NSMutableArray 将 UILabel 动态添加到 View

转载 作者:行者123 更新时间:2023-11-29 11:05:16 26 4
gpt4 key购买 nike

我有一个 NSMutableArray,其中包含 Person 类型的对象。 Person 对象包含 NSString *name、NSString *dateStamp 和 NSString *testScore 参数。我想使用快速枚举做的是将每个对象的参数显示为 View 中一行的 UILabel,每个对象显示在每一行上。

问题是 NSMutableArray 可能包含任意数量的对象,因此 View 上可能有一两行标签,或者 View 上有几行。我想创建一个 for 循环,它将动态地用一行上的每个对象填充 View (并且间隔一致),并允许用户向下滚动以查看更下方且最初无法在屏幕上看到的任何行.

我的 for 循环看起来像这样:

for (Person *checkPerson in personList) {
UILabel *label1 = [[UILabel alloc] initWithFrame: CGRectMake(10, 10, 50, 20)];
label1.text = Person.name;

UILabel *label2 = [[UILabel alloc] initWithFrame: CGRectMake(70, 10, 50, 20)];
label2.text = Person.dateStamp;

UILabel *label3 = [[UILabel alloc] initWithFrame: CGRectMake(130, 10, 50, 20)];
label3.text = Person.testScore;

[self.view addSubView:label1];
[self.view addSubView:label2];
[self.view addSubView:label3];
}

我需要做的是动态调整 CGRectMake 字段中的“y”值,以便随着 NSMutableArray 的迭代,每个对象在另一行上依次向下移动,这样用户就可以向下滚动以进一步查看如有必要,额外的行。滚动功能是否自动添加?

最佳答案

你应该做 block 枚举,因为这也给你一个索引,你可以用它来计算 y

[personList enumerateObjectsUsingBlock:^(Person *person, NSUInteger idx, BOOL *stop) {
UILabel *label1 = [[UILabel alloc] initWithFrame: CGRectMake(10, 10+20*idx , 50, 20)];
label1.text = person.name;
UILabel *label2 = [[UILabel alloc] initWithFrame: CGRectMake(70, 10+20 *idx, 50, 20)];
label2.text = person.dateStamp;

UILabel *label3 = [[UILabel alloc] initWithFrame: CGRectMake(130, 10+20*idx, 50, 20)];
label3.text = person.testScore;

[self.view addSubView:label1];
[self.view addSubView:label2];
[self.view addSubView:label3];
}];

您应该将它们放在 UIScrollView 上,根据数组中元素的数量设置 contentSize。

scrollView.contentSize = CGSizeMake(<width>, [personList count] / 3 *30);

您还应该考虑使用 UITableView。它可能更容易,并且单元重用可以保持较低的内存使用率。

关于objective-c - 尝试通过快速枚举 NSMutableArray 将 UILabel 动态添加到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13921446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com