代码之家  ›  专栏  ›  技术社区  ›  Jonah

为iPhone创建清单(类似于TouchCells示例代码)应用程序时出现问题。检查随机单元格

  •  2
  • Jonah  · 技术社区  · 15 年前

    我在创建一个类似于苹果示例代码的触摸屏示例样式的清单时遇到了问题。基本上,它是一个表,允许对其项进行多个选择,并给每个选定项一个复选标记。

    我遇到的问题是,当我选择一个项目,然后向下滚动屏幕时,另一个项目(屏幕外)将被随机选择。似乎它通常是屏幕上要加载的下一个单元格。

    我不知道我做错了什么,所以我用苹果的TouchCells代码测试了它。但是在他们的程序中,他们只有6个单元,没有空间滚动。所以,我复制了plist文件中的一些项,以生成更多的单元格…同样的问题突然出现。如果选择一个单元格,然后滚动,则会随机选择另一个单元格。

    更新 我最近尝试了名为“检查”的iPhone Dev食谱示例代码…你猜对了,同样的问题。链接如下: http://code.google.com/p/cookbooksamples/downloads/list

    这让我发疯。是虫子还是我做错了什么?有人知道怎么解决这个问题吗?

    谢谢!

    还有,有人知道有什么示例代码显示了如何做这件事吗?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Justin Gallagher    15 年前

    我的应用程序中的自定义UITableViewCell也有类似的问题。根据苹果文档 prepareForReuse :“只应重置与内容无关的单元格属性,例如alpha、编辑和选择状态。”

    TouchCells示例与选择状态相关,但它们使用布尔值和图像来模拟选择。到目前为止,我唯一能做的就是为每个单元使用一个唯一的重用标识符。有点破坏了重用的目的,不是吗?

    例如,要解决触摸屏示例中的问题,请替换:

    static NSString *kCustomCellID = @"MyCellID";
    

    用:

    NSString *kCustomCellID = [NSString stringWithFormat:@"MyCellID%d", indexPath.row];
    

    如果你有少量的细胞,我想这是可以的,但是必须有更好的方法,对吗?

        2
  •  3
  •   coneybeare    15 年前

    您可能正在这样做:

    if (whatever) {
      cell.accessoryType = UITableViewCellAccessoryCheckMark;
    }
    

    当您应该这样做时:

    if (whatever) {
      cell.accessoryType = UITableViewCellAccessoryCheckMark;
    } else {
      cell.accessoryType = UITableViewCellAccessoryNone;
    }
    

    如果使用自定义单元格,则可以重写PrepareForereuse:

    - (void)prepareForReuse {
      [super prepareForReuse];
      self.accessoryType = UITableViewCellAccessoryNone;
    }
    
        3
  •  0
  •   sfeast    15 年前

    在深夜痛苦的寻找后找到了解决办法…

    在customcell.m中的checkaction函数(参考touchcell示例)中,使用backbackgroundimage而不是setimage。