【问题标题】:How to keep track of selected Item in a list being represented by tableView?如何跟踪由 tableView 表示的列表中的选定项目?
【发布时间】:2013-07-03 05:36:07
【问题描述】:

如果我选择一行并旋转设备,我的方向布局将完全不同。 我想跟踪上次选择的项目,我可以在新布局中旋转后重新做。

那么,理想情况下,我应该存储选定的 indexPath、选定的行号还是选定的模型对象在 dataSource 的每个单元格中表示?

我尝试存储选定的单元格,但重复使用时会产生问题。

【问题讨论】:

  • 保存选中的IndexPath。如果您想跟踪多个单元格,可以在堆栈中跟踪它们,并根据需要推送和弹出。
  • 所以你是说[UITableView indexPathForSelectedRow]在设备旋转后不一样了?
  • 听起来你需要在旋转之前存储所选单元格的属性(足以在旋转后找到它),然后取消选择,重新加载等,然后重新选择。如果您在单元格中有模型对象,那么这将变得容易得多。 “M、V、C,就像 1、2、3 一样简单”。唱吧。
  • 顺便说一句,看到了你的个人资料。您的“技能”数组指针是 NSMutableArray 的指针,但 @[] 文字语法将为您提供 immutableArray。只需添加对 mutableCopy 的调用!否则你将无法添加更多技能 :P :P 否则 .. 风格不错!
  • @AmoghTalpallikar 非常感谢 - 我会更新我的个人资料! :D

标签: ios objective-c uitableview


【解决方案1】:

如果您对新布局使用相同的数据,我认为保存选定的 indexPath 就足够了。但是,如果您以不同的方式使用数据,则意味着它可以位于不同的索引处(如果您在轮换后进行某些处理),那么您也需要保存它。

编辑

在为新方向创建新布局之前,找到选定单元格的选定索引路径并保存。然后在cellForRowAtIndexPath: 中,检查它是否存在于该 indexPath 并使其状态为选中。希望对你有帮助。

【讨论】:

    【解决方案2】:

    首先初始化一个NSMutableArray *selectedItems。 (viewDidLoad中的alloc-init)

    didSelectRowAtIndexPath委托方法中,检查

    if ([selectedItems indexOfObject:indexPath] == NSNotFound)  // if not available
    {
         [selectedItems addObject: indextPath]
    }
    
    // if you are having deselect option as well then you can have else statement as well
    else 
    {
         [selectedItems removeObject: indexPath];
    }
    

    所以现在在你的cellForRowAtIndexPath 初始化单元格时,

    首先绘制一个具有所有属性的普通单元格,最后检查:

    if ([selectedItems indexOfObject:indexPath] != NSNotFound)  // if current indexpath is selected
    {
         // then display your selected cell [checkbox or different bg color as per your requirements]
    }
    

    希望对你有所帮助。

    【讨论】:

    • ![selectedItems indexOfObject:indexPath] 如果索引也为 0,则为真。使用 NSNotFound 代替。这就是找不到对象时返回的内容。希望这对您有所帮助。
    • 我只是想给出一个逻辑来满足您的要求。是的,你是对的,请查看我更新的答案。
    • 看问题下的 trojanfoe 的 cmets。我认为这是一个更好的方法。我们已经在维护模型的数据源。拥有另一个 indexPaths 数组没有意义。模型应该包含所有信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2020-04-17
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多