如何防止UITableView中的一行取消选中?

5

当我选择UITableView的一行时,它会变成绿色(自定义),但是当我选择另一行时,之前选择的行不会保持绿色。我在每次选择行后重新加载表格。我尝试过以下方法:

NSIndexPath *selection = [mainTable indexPathForSelectedRow];
[mainTable selectRowAtIndexPath:selection animated:NO
scrollPosition:UITableViewScrollPositionNone]; 

但是,使用这段代码只会使最近选择的行变为绿色(已选)。我搜索了一些解决方案,大部分建议将所选行的索引值存储在数组中,并稍后使用该数组。我尝试过这样做,但没有成功。如果有其他建议或示例代码,将不胜感激。
2个回答

8

更新:

更好的方法是在 UITableViewDelegate 方法 tableView:willDeselectRowAtIndexPath: 中返回 nil,以使您希望保持选定状态的 indexPath 保持选定状态。

不要使用这个方法:

尝试添加 UITableViewDelegate 方法:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
  //use this for row u want to prevent to deSelect
  [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];               
}

5
实现这个功能的更好方法是在 UITableViewDelegate 方法 tableView:willDeselectRowAtIndexPath: 中为希望保持选中的 indexPath 返回 nil。这样,单元格将保持选中状态(而不是在取消选中后立即被重新选中)。 - stu

4
做这个:
mainTable.allowsMultipleSelection = YES;

UITableView Class Reference中得知: allowsMultipleSelection 一个布尔值,用于确定在编辑模式之外用户是否可以选择多行。 @property(nonatomic) BOOL allowsMultipleSelection Discussion 此属性控制是否可以同时选择多个行,在编辑模式之外。当此属性的值为“YES”时,会在每个被点击的行旁边放置一个复选标记。再次点击该行将删除复选标记。如果调用indexPathsForSelectedRows,则可以获取标识所选行的索引路径。
此属性的默认值为NO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接