这是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中,它没有用,有人可以给我一个提示,如何纠正它?感谢。
答案 0 :(得分:6)
您必须在tableView:willSelectRowAtIndexPath:
查看UITableView class reference 特别是在最后一句话:
返回值确认或更改所选内容的索引路径对象 行。如果需要,返回除indexPath之外的NSIndexPath对象 另一个要选择的单元格。如果您不想要该行,则返回nil 地选择。
所以这样的事情可以在tableView:willSelectRowAtIndexPath:
中使用:
if ([multiOptions count] > 5) return nil;