如何限制UITableViewController中的多选

时间:2014-06-24 07:40:49

标签: ios objective-c uitableview

这是tableView数据源和委托实现,我设置的最大选择是5。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    if ([multiOptions count] > 5) {
        [self tableView:tableView didDeselectRowAtIndexPath:indexPath];
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.selected = NO;
        //show alert
    }
    ...
}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    [multiOptions removeObject:selectedOption];
    ...
}

但是这里有一个问题,如果选项超出限制,第一次点击单元格就可以了。但第二次单击该单元格将调用

didDeselectRowAtIndexPath

再次,这不是我的预期,我尝试了

[tableView deselectRowAtIndexPath:indexPath animated:YES];
在didSelectRowAtIndexPath中,它没有用,有人可以给我一个提示,如何纠正它?感谢。

1 个答案:

答案 0 :(得分:6)

您必须在tableView:willSelectRowAtIndexPath:

中查看此内容

查看UITableView class reference 特别是在最后一句话:

  

返回值确认或更改所选内容的索引路径对象   行。如果需要,返回除indexPath之外的NSIndexPath对象   另一个要选择的单元格。如果您不想要该行,则返回nil   地选择。

所以这样的事情可以在tableView:willSelectRowAtIndexPath:中使用:

if ([multiOptions count] > 5) return nil;