0

我有一个 UITableView 显示通讯录中的联系人。我启用了多选编辑样式。当我展示 tableView 时,它按预期工作。用户点击一行,单元格左侧的红色复选标记就会填充。太好了。

我将这些选择保存在呈现视图控制器的数组属性中。当我再次显示我的表格时,我希望这些单元格保持选中状态(即,不是蓝色突出显示,只是红色复选标记仍然填充)。在 cellForRowAtIndexPath: 我得到那个索引路径的单元格的对象,测试当前视图控制器的数组是否包含那个对象,如果是的话[cell setSelected:YES];

在我看来,这应该导致与用户触摸单元格时相同的选定外观(只是红色复选标记)。取而代之的是,红色的勾号确实会填满,但单元格也会暂时突出显示蓝色,并且文本会永久变为白色,给人的印象是联系人的名字已经消失了。如果有帮助,我很乐意发布代码,但这似乎只是 UITableView 的一个怪癖,有人可能熟悉吗?编辑:这张图片显示了我拥有(和想要)的那种复选标记。我无法拼凑,但为什么当我调用 [cell setSelected:YES]; 它的行为与响应触摸时的行为不同。你在这里看到的是在我调用 [cell setSelected:YES]; 之后。它看起来几乎是我想要的,但名字已经消失了。我不

在此处输入图像描述

4

2 回答 2

0

如果我了解您正在寻找的视觉效果,您应该通过使用cell.accessoryType = UITableViewCellAccessoryCheckmark;而不是[cell setSelected:YES];.

于 2012-05-08T22:48:43.337 回答
0

这解决了。我想我是通过尝试在 cellForRowAtIndexPath 中设置选择来为自己制造问题。也许表格视图对单元格的重用让它变得疯狂?

使单元格在多选样式表的表示之间正确选择的解决方案是将选定的索引存储在 viewWillDisappear 中。我给呈现视图控制器一个属性NSArray *selectedIndexes,并在 viewWillDisappear 中调用

[self.presentingViewController setSelectedIndexes:[myTableView indexPathsForSelectedRows]];

然后在 viewWillAppear 中,我将该数组放入一个 ivar,遍历它并调用[myTableView selectRowForIndexPath:[selectedIndexes objectAtIndex:i] animated:YES]; That 就可以了。感谢 user523234 的评论。帮助我在正确的轨道上思考。

于 2012-05-09T17:37:56.227 回答