如何限制UITableViewController中的多选

pqt*_*eru 1 objective-c uitableview ios

这里有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];
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

didDeselectRowAtIndexPath
Run Code Online (Sandbox Code Playgroud)

再次,那不是我的预期,我试过了

[tableView deselectRowAtIndexPath:indexPath animated:YES];
Run Code Online (Sandbox Code Playgroud)

在didSelectRowAtIndexPath中,它没有用,有人可以给我一个提示,如何纠正它?谢谢.

Ale*_*der 6

你必须检查这个 tableView:willSelectRowAtIndexPath:

看一下UITableView类引用, 特别是在最后一句:

返回值一个索引路径对象,用于确认或更改所选行.如果要选择其他单元格,则返回indexPath以外的NSIndexPath对象.如果您不想选择行,则返回nil.

所以像这样的东西可以在tableView:willSelectRowAtIndexPath::

if ([multiOptions count] > 5) return nil;
Run Code Online (Sandbox Code Playgroud)