【问题标题】:Conditional Statement + UITableView: Repeat values in array over and over条件语句+ UITableView:一遍又一遍地重复数组中的值
【发布时间】:2014-10-22 18:53:02
【问题描述】:

我觉得很难把标题放在上面,所以请随时修改它。

我有一个数组,其中包含我在cellForRowAtIndexPath 中使用的 5 个CGSizes

 NSArray *mElements = [NSArray arrayWithObjects:[NSValue valueWithCGSize:
                      CGSizeMake(600.0, 900.0)],
                      [NSValue valueWithCGSize:CGSizeMake(300.0, 800.0)],
                      [NSValue valueWithCGSize:CGSizeMake(546.0, 1032.0)],
                      [NSValue valueWithCGSize:CGSizeMake(300.0, 700.0)],
                      [NSValue valueWithCGSize:CGSizeMake(300.0, 800.0)],
                      nil];

我目前从数组中获取随机大小并应用于每个单元格,使其具有交错布局。但是问题是,如果我重新加载UITableView,所有行的大小都会不同,这很明显,因为它每次都会选择一个随机值。

int random = arc4random_uniform((uint32_t) mElements.count);
CGSize size =[[mElements objectAtIndex:random] CGSizeValue];

但是我想要的效果是 row 0 将始终具有相同的大小,可能是数组的索引 0。然后 row 1 在索引 1 处具有值,然后在第 2 行具有在索引 2 处的值,依此类推。然后,我希望索引 4 处的 row 具有数组索引 0 处的值(因此数组重新开始)。我试过这个,但它需要太多的硬编码。

if (indexPath.item%2 && !indexPath.item%4) {

    size =[[mElements objectAtIndex:1] CGSizeValue];
}
else if(indexPath.item%3 && !indexPath.item%6){
    size =[[mElements objectAtIndex:2] CGSizeValue];

}
else if(indexPath.item%4){

    size =[[mElements objectAtIndex:2] CGSizeValue];

}
//... and so on

我希望在创建动态条件状态时获得帮助,我不必对表中每个可能的row 索引进行硬编码。不过,我似乎无法理解它。

【问题讨论】:

    标签: arrays uitableview conditional-statements


    【解决方案1】:
    size = [[mElements objectAtIndex:indexPath.row % [mElements count]] CGSizeValue];
    

    这会给你一个不断重复的模式。 行数可以是

    return [mElements count]*ROW_MULTIPLYER;
    

    在哪里

    #define ROW_MULTIPLYER 10000
    

    【讨论】:

    • 这似乎完成了这项工作。无需使用返回值,因为我的单元格是来自网络的动态。
    • 酷。 numRows 的东西主要是如果有人希望将来有一个伪无限滚动效果......但你是对的,它不适用于你的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    相关资源
    最近更新 更多