0

这是一个很难解释的问题,所以我希望我能说明一下

我有一个tableview,我想要那个..

第 1 行有一个背景,第 2 行有另一个背景。

和第 3 行有第三个背景..

第四行应该有第一个背景,第五行应该有第二个..

等等..

我用了这段代码

if(row+1%1==0){
    bg = [UIImage imageNamed:@"row1.png"];
    selectionBg = [UIImage imageNamed:@"row1.png"];
}

else if(row+1%2==0){
    bg = [UIImage imageNamed:@"row2.png"];
    selectionBg = [UIImage imageNamed:@"row2.png"];
}else if(row+1%3==0){
    bg = [UIImage imageNamed:@"row3.png"];
    selectionBg = [UIImage imageNamed:@"row3.png"];
}

我正在尝试使用模数,但我迷路了..那么有办法吗?

提前致谢

4

2 回答 2

3

您应该使用mod 3,因为您有三个选项:

if (row % 3 == 0) {
    // Option A
} else if (row % 3 == 1) {
    // Option B
} else {
    // Option C
}

顺便说一句,您了解模运算的作用吗?这可能很有趣(来自Wikipedia):

在计算中,模运算求一个数除以另一个数的余数。

给定两个正数,a(被除数)和 n(除数),模 n(缩写为 mod n)可以被认为是 a 除以 n 的余数。例如,表达式“5 mod 4”的计算结果为 1,因为 5 除以 4 余数为 1,而“9 mod 3”的计算结果为 0,因为 9 除以 3 余数为 0;乘以 3 乘以 3 后,9 没有什么可减去的。


这是代码中发生的事情:

row       row % 3   option
0         0         A
1         1         B
2         2         C
3         0         A
4         1         B
5         2         C
6         0         A
…         …         …
于 2012-06-16T19:17:49.213 回答
1

不要使用模数,而是使用静态计数器,如下所示

    static int rowBGSelector = 0;
    switch (rowBGSelector) {
        case 0:
            NSLog(@"%d, first", i); //Chose BG 1
            break;
        case 1:
            NSLog(@"%d, second", i); //Chose BG 2
            break;
        case 2:
            NSLog(@"%d, third", i); //Chose BG 3
            break;

        default:
            rowBGSelector = -1; //Reset the static
            break;
    }

    rowBGSelector++; //Increment
于 2012-06-16T19:22:12.613 回答