【发布时间】:2013-03-30 23:18:42
【问题描述】:
所以我编写了这段代码来在我想要选择的行旁边打一个复选标记,因为我想要多个选择的行
UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
cell.accessoryType = UITableViewCellAccessoryNone;
} else {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
但是当我使用方法时:
NSArray *selectedIndexPaths = [self.LightsView indexPathsForSelectedRows];
它只获取我点击的最后一行。勾号是不是没有选中?
【问题讨论】:
-
不,选择的是最后被点击的行并且尚未取消选择。与细胞的配件无关。您需要自己跟踪“选定”(我们称它们为已检查,这样更合适)行。
-
还要确保您的
tableView:cellForRowAtIndexPath:识别出可以重复使用的单元格,因此,它必须根据需要重置该行的accessoryType;不要试图依靠accessoryType来了解您是否“检查”了一行。有一个单独的模型支持您的 tableview 跟踪哪些行被“检查”,并让您的上述代码更新该模型以及 UI,并让tableView:cellForRowAtIndexPath:也引用该模型。
标签: ios objective-c xcode uitableview