手动选择自定义UITableViewCell不会使tableView.indexPathsForSelectedRows返回单元格?

时间:2013-07-31 13:28:38

标签: ios uitableview

我有一个带开关的自定义UITableViewCell子类。在子类内的valueChanged操作中,我根据开关状态设置了单元格的选择属性。

self.selected = self.optionSwitch.isOn

在处理这些单元格的UITableViewController中,我询问所选行的表视图,但它返回nil(没有选定的行)。

self.tableView.indexPathsForSelectedRows

如果选择了单元格,为什么返回nil?我确定他们是因为我检索了一个来检查选定的属性,实际上是

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
BOOL isSelected = cell.isSelected;

PS1:我已经设置了我的表视图的 allowsMultipleSelection 属性。

PS2:我知道 tableView:selectRowAtIndexPath:有效,但我不想为自定义单元格创建委托,只是为了通知表格视图并让tableview选择该行。

2 个答案:

答案 0 :(得分:0)

我放弃并使用了PS2中的解决方案。为自定义单元格创建一个委托并调用selectRowMethod。

#pragma mark - CellDelegate

- (void)didSelectCell:(CustomCell *)cell
{
    NSIndexPath *ip = [self.tableView indexPathForCell:cell];
    [self.tableView selectRowAtIndexPath:ip animated:NO  scrollPosition:UITableViewScrollPositionNone];
}

- (void)didDeselectOptionCell:(CustomCell *)cell
{
    NSIndexPath *ip = [self.tableView indexPathForCell:cell];
    [self.tableView deselectRowAtIndexPath:ip animated:NO];
}

答案 1 :(得分:0)

如果有人有同样的问题,这是我的修复:

NSIndexPath *index ;
for( int i=0; i<self.slices.contains.count; i++){
    index = [NSIndexPath indexPathForRow:i inSection:0];
    [self.tableView selectRowAtIndexPath:index animated:NO scrollPosition:UITableViewScrollPositionNone];
}

这会遍历tableview的所有单元格并选择它们(实际上将它们添加到

中)
tableview indexPathsForSelectedRows