我是 iOS
开发新手。
我有一个基于导航的应用程序,在我的应用程序中,我使用 for 循环
创建了动态按钮。
我在 FirstViewController
中有两个 UITextField
(行 和列)。当用户输入 row 和 column 的值然后单击 OK 按钮
row 和 的值column 传递给 anOtherViewController
。在 anOtherViewController
中,我必须添加一个逻辑来根据行和列值创建所有按钮。
我的逻辑代码:
for (int i = 1 ; i <= rows; i++)
{
for (int j = 1 ; j <= columns ; j++)
{
NSString *btnTitle = [NSString stringWithFormat:@"%d",buttonCount];
self.btnCount = [UIButton buttonWithType:UIButtonTypeRoundedRect];
self.btnCount.tag = [btnTitle intValue];
[self.btnCount setTitle: btnTitle forState: UIControlStateNormal];
[self.btnCount addTarget:self action:@selector(btnCountPressed:) forControlEvents:UIControlEventTouchUpInside];
self.btnCount.frame = CGRectMake(162+changedX, 60+changedY, 43, 43);
[self.scrollView addSubview:self.btnCount];
[self.listOfbtnCount addObject:btnTitle];
changedY = changedY + 50;
buttonCount = buttonCount + 1;
}
changedX = changedX + 55;
if (i == rows)
widthScView = changedX;
if (heightScView == 0)
heightScView = changedY;
changedY = 5;
}
我的截图:
它工作正常,但我的问题是,如果我输入 行 和 列 的值超过 40(大约) 那么我的应用程序需要更多时间来创建动态按钮。该问题仅与创建按钮所需的时间有关。
有什么方法可以更快地创建按钮?我还需要知道我的代码是否不利于内存管理?请帮我解决这个问题。
供引用: 我没有生成任何错误,我遇到的问题是创建按钮的过程很耗时。
提前致谢。
最佳答案
你应该为此使用 UICollectionView
。
UICollectionView
其工作方式与 UITableView
非常相似,因为它将管理屏幕上显示的单元格,包括滚动,并且它会在需要时向其数据源询问新单元格。您还可以回收电池,因此您只需要创建足够显示的空间,再加上一些额外的空间。这应该真正提高性能,尤其是在滚动时。
Apple 有一些 sample code using UICollectionView here ,并在 2012 WWDC Videos 中观看 Introducing Collection Views会让你有个好的开始。
my problem is that If i enter values of row and column more then 40
40 行 40 列将为您提供 1600 个按钮,其中大部分在大多数时间都不需要存在。通过为您管理屏幕上需要哪些单元格,UICollectionView
会将其减少到大约 80 个(根据您的屏幕截图判断)。通过这种方式,您应该会看到好得多的性能。
UICollectionView
还将简化按钮的定位,一旦您配置了 Collection View (您可以在代码或 Interface Builder 中完成),您将不需要任何自己的代码来计算按钮的位置。
关于iphone - 在 ScrollView 中创建动态 UIButton 的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16140139/