我是iOS
发展的新手。
我有一个基于导航的应用程序,在我的应用程序中,我使用for loop
创建了动态按钮。
我在UITextField
中有两个FirstViewController
s(行和列)。当用户输入值行和列时,请点击OK Button
行和列传递给anOtherViewController
。在anOtherViewController
中,我必须根据行和列值创建一个逻辑来创建所有按钮。
MyLogical Code:
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;
}
我的ScreenShot:
一切正常,但我的问题是,如果我输入行和列的值,那么 40 ( about < / em>)然后我的应用程序需要更多时间来创建动态按钮。该问题仅与创建按钮所需的时间有关。
有没有办法更快地创建按钮?我还需要知道我的代码是否对内存管理有害?请帮我解决这个问题。
有关信息: 我没有生成任何错误,我只发出了创建按钮的耗时过程。
先谢谢。
答案 0 :(得分:7)
您应该使用UICollectionView
。
UICollectionView
与UITableView
非常相似,因为它会管理屏幕上显示的单元格,包括滚动,并且会根据需要向新数据源询问其数据源。您还可以回收单元格,因此您只需要创建足够的内容以及一些额外的内容。这应该真正提高性能,尤其是在滚动时。
Apple有一些sample code using UICollectionView here,在2012 WWDC Videos中观看介绍集合视图会让您有个良好的开端。
我的问题是,如果我输入的行和列的值超过40
40行40列会给你1600个按钮,其中大部分都不需要存在。通过管理屏幕上需要哪些单元格,UICollectionView
会将其减少到大约八十(通过屏幕截图判断)。你应该以这种方式看到更好,更好的表现。
UICollectionView
也将简化按钮的定位,您不需要任何自己的代码来计算位置按钮。
答案 1 :(得分: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;
}
查看我输出的屏幕..
答案 2 :(得分: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)];
}