iphone - 在 ScrollView 中创建动态 UIButton 的正确方法?

标签 iphone ios objective-c cocoa-touch

我是 iOS 开发新手。

我有一个基于导航的应用程序,在我的应用程序中,我使用 for 循环 创建了动态按钮。 我在 FirstViewController 中有两个 UITextField()。当用户输入 rowcolumn 的值然后单击 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;
}

我的截图:

enter image description here

它工作正常,但我的问题是,如果我输入 的值超过 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/

相关文章:

iphone - 像我们自己的方法一样调用委托(delegate)方法有没有错

ios - Chromecast 警告 loadMedia 自动播放已弃用

ios - 创建没有警报的EKEvent

ios - 迭代 UIOutletCollection 会产生不可预测的结果

iphone - NSIncation 将 C 数组传递给 Objective-C 方法

iphone - MonoDevelop 的编辑器对你来说慢吗?

ios - 无法从开发人员处安装 IPA

iphone - 使用 PopOverController 填充 TableView - Objective C

iphone - 仅第一个 UIView 添加的 View addSubview 显示正确的方向

ios - 在 CollectionView 中滚动到底部时加载