用户选择的多选行为与setSelected不同:animated:

时间:2012-05-08 22:35:31

标签: objective-c ios uitableview

我有一个显示来自AddressBook的联系人的UITableView。我启用了多选编辑样式。当我呈现tableView时,它按预期工作。用户点击一行,红色复选标记到单元格的左侧填充。很棒。

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

在我看来,这应该会产生与用户触摸单元格时相同的选择外观(只是红色复选标记)。相反,红色检查确实填充,但是单元格也会瞬间突出显示蓝色,文本会永久变为白色,从而产生联系人姓名消失的印象。我很乐意发布代码,如果它有用,但这似乎只是一个人可能熟悉的UITableView的怪癖? 编辑:此图像显示我有(和想要)的复选标记。我不能拼凑为什么当我打电话给[cell setSelected:YES];它的行为与触摸时的行为不同。你在这里看到的是我打电话给[cell setSelected:YES] ;.它看起来几乎是我想要的,但名字已经消失了。当列表出现时,我不希望单元格突出显示。

enter image description here

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这已经解决了。我想通过尝试在cellForRowAtIndexPath中设置setSelected来为自己制造问题。也许桌面视图重用细胞会让它变得疯狂吗?

在多选样式表的演示文稿之间使单元格正确选择的解决方案是将所选索引存储在viewWillDisappear中。我为呈现视图控制器提供了属性NSArray *selectedIndexes,并在viewWillDisappear中调用了

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

然后在viewWillAppear中,我将该数组放入一个ivar中,通过它迭代并调用[myTableView selectRowForIndexPath:[selectedIndexes objectAtIndex:i] animated:YES]; 这就是诀窍。感谢user523234的评论。帮助让我思考正确的轨道。