我有以下代码:

//Value of userCount is 25
auxCount = 0;
for (int y_axis=0; y_axis<=8; y_axis++)  //ROWS
    {
        for (int x_axis=0; x_axis<=2; x_axis++) //COLUMNS
        {
            if (auxCount<userCount) {
                NSLog(@"auxCount: %i\n",auxCount);
                NSLog(@"userCount: %i\n\n",userCount);
                UIButton *btn=       [[UIButton alloc] initWithFrame:CGRectMake(16+100*x_axis,115.0*y_axis,88.0 ,88.0)];
                UILabel *userLabel = [[UILabel alloc] initWithFrame:CGRectMake(16+100*x_axis,90+115.0*y_axis, 88.0, 15.0)];
                userLabel.textAlignment = UITextAlignmentCenter;
                userLabel.text = mensaje;

                btn.backgroundColor=[UIColor groupTableViewBackgroundColor];
                [scrollViewUsers addSubview:btn];
                [scrollViewUsers addSubview:userLabel];

                auxCount++;

            }
        }
    }


有了这个,我想要一个3列X行的矩阵,但是只显示3行,而第三行只显示1个按钮。并在“调试”区域中出现:
 auxCount:0
 userCount:25

auxCount:4
 userCount:25

auxCount:8
 userCount:25

auxCount:12
 userCount:25

auxCount:16
 userCount:25

auxCount:20
 userCount:25

auxCount:24
 userCount:25

auxCount由4乘4递增。我认为这是因为if指令仅由第一个for循环执行,但我不知道为什么。
拜托我需要你的帮忙。

ps:对不起,我的英语!!

最佳答案

就像我在我的应用程序中使用过的那样,只需尝试一下循环即可。

根据列数和总计数找出行数

int r;
float rem = [dao libraryCount] % kCol;
if(rem == 0.0f)
    r = floor([dao libraryCount]/kD);
else
    r = ceil([dao libraryCount]/kD);


如果行r是项的总数,而[dao libraryCount是列的固定数,则kCol是数字,它是3,而kDkCol相同,唯一的区别是它是float类型,即您的情况是3.0

然后使用如下的for循环

for (int row = 0; row < r; ++row)
{
    for (int col = 0; col < kCol; ++col)
    {
       //Your Code to display or any thing
    }
}


对于auxCount使用此代码

int index = (row * kCol) + col;
        if(index < [dao libraryCount])
        {
            //Your Code to display or any thing
        }


将其放在两个for循环中而不是使用++
只需更改两个for循环并用适当的变量替换if条件

享受编码:)
还有祝你好运

需要任何帮助只是评论我,我将很乐意为您提供帮助

10-08 05:59