4

我是iOS开发新手。

我有一个基于导航的应用程序,在我的应用程序中,我使用for loop. 我有两个UITextFields(FirstViewController。当用户输入行和列的值时然后单击OK Button值传递到。在我必须放置一个逻辑来创建基于行和列值的所有按钮。anOtherViewControlleranOtherViewController

逻辑代码:

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 ( about ),那么我的应用程序需要更多时间来创建动态按钮。该问题仅与创建按钮所需的时间有关。

有什么方法可以更快地创建一个按钮?我还需要知道我的代码是否不利于内存管理?请在这个问题上帮助我。

供参考: 我没有产生任何错误,我只遇到了创建按钮的耗时过程的问题。

预先感谢。

4

3 回答 3

7

你应该使用UICollectionView这个。

UICollectionView工作原理很像UITableView,它将管理屏幕上显示的单元格,包括滚动,并且它会在需要时向其数据源询问新单元格。您还可以回收单元格,因此您只需要创建大约足以显示的内容,以及一些额外的内容。这应该确实可以提高性能,尤其是在滚动时。

Apple 在这里有一些使用 UICollectionView 的示例代码,观看2012 WWDC Videos中的Introducing Collection Views将使您有一个良好的开端。

我的问题是,如果我输入的行和列的值超过 40

四十行四十列将为您提供 1600 个按钮,其中大多数大多数时候不需要存在。通过为您管理屏幕上需要哪些单元格,UICollectionView可以将其减少到大约 80 个(根据您的屏幕截图判断)。通过这种方式,您应该会看到很多更好的性能。

UICollectionView一旦您配置了集合视图(您可以在代码或界面生成器中完成),还将简化按钮的定位,您不需要任何自己的代码来计算按钮的位置。

于 2013-04-22T05:47:32.587 回答
0

只需根据您的要求在此处实现您的逻辑..

    int imageIndex = 0;

    int yOffset = 4;//set offset which you want...

    while (imageIndex < rows)        
    {
        int yPos =  7 + yOffset * 30; // set distance in height between two raws

        for(int i = 0; i < columns; ++i)
        {
            CGRect  rect = CGRectMake((0 + i * 80), yPos, 80, 31);**// here set frame of every button with different x and y postion// here width of button is 80 and height is 31**

            if (imageIndex < rows) {


                UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
                button.frame = rect;
                button.tag = imageIndex;
                [button addTarget:self 
                           action:@selector(btnTemp_Clicked:)
                 forControlEvents:UIControlEventTouchDown];

                [button setTitle:[NSString stringWithFormat:@"%d",imageIndex] forState:UIControlStateNormal];
                [button.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];

//                [button.titleLabel setTextColor:[UIColor blueColor]];
                [button setTitleColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"circle03.jpg"]] forState:UIControlStateNormal ];                
                [button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted ];

                [button setNeedsDisplay];

                [yourScrollView addSubview:button];

            }
            ++imageIndex;
        }
        ++yOffset;
    }

查看我输出的屏幕..

在此处输入图像描述

于 2013-04-22T05:47:24.127 回答
0

试试这个方法

    -(void)ScrollViewSetting {

        scrollview.scrollEnabled=YES;
        scrollview.userInteractionEnabled=YES;

        TotalStyleX=25;
        TotalStyleY=18;

        int count=0;
        int px=0;
        int py=0;


        for (int i=1; i<=TotalStyleX; i++) {
            px=0;
            for (int j=1; j<=TotalStyleY; j++) {
                count++;

                UIButton *btn1=[[UIButton alloc] init];

                btn1.tag = count;
                btn1.frame=CGRectMake(px+10, py+10, 300, 380); //you can set your height and width your x and y position
                [scrollview addSubview:btn1];

                px=px+320;     
            }
            py=py+400;

        }
        [scrollview setContentSize:CGSizeMake(px, py)];

    }
于 2013-04-22T09:37:55.743 回答