用多项选择隐藏 UITableView 上的圆圈

Posted

技术标签:

【中文标题】用多项选择隐藏 UITableView 上的圆圈【英文标题】:Hide the circle on UITableView with multiple selection 【发布时间】:2014-02-02 08:41:38 【问题描述】:

我有一个启用了多项选择的UITableView。 我的一些单元格不会被选中。对于我实施的那些:

tableView:cellForRowAtIndexPath: 我设置cell.selectionStyle = UITableViewCellSelectionStyleNone;

tableView:didSelectRowAtIndexPath: 我打电话给[self.tableView deselectRowAtIndexPath:indexPath animated:NO];

这很好用。我唯一需要注意的是,单元格左侧的小圆圈仍然出现。当用户点击单元格时不会对其进行检查,但我希望在单元格“不可选择”时不显示它。

如何隐藏某些单元格的圆圈?

谢谢

【问题讨论】:

您是否使用 UITableView 的原生编辑模式来获取单元格上的圆圈? 是的...我设置为启用它是:self.tableView.allowsMultipleSelectionDuringEditing = YES; 如何更改圆形图像? 【参考方案1】:

您必须在表视图数据源中实现tableView:canEditRowAtIndexPath: 方法。它可以让您阻止您想要编辑的单元格,从而不显示圆圈。

请注意,设置cell.selectionStyle = UITableViewCellSelectionStyleNone; 不会阻止选择单元格。它只是删除选定单元格上的任何视觉线索。

【讨论】:

【参考方案2】:

试试这个...

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    if([[tableView indexPathsForSelectedRows] containsObject:indexPath]) 
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    
    else 
        cell.accessoryType = UITableViewCellAccessoryNone;
    


- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryNone;


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;

【讨论】:

【参考方案3】:

子类化UITableViewCell 并添加以下方法对我有用:

override func setEditing(_ editing: Bool, animated: Bool) 
    super.setEditing(false, animated: true);

【讨论】:

以上是关于用多项选择隐藏 UITableView 上的圆圈的主要内容,如果未能解决你的问题,请参考以下文章

UITableviewCell - 在编辑模式下单击空复选标记圆圈不会选择单元格

UIPopOverController + UITableView - 选择单元格时隐藏弹出框

UITableView 自定义分隔符,选择时隐藏

如何在动态 uitableview 中隐藏部分及其行

UITableViewCellSeparatorStyleNone 在 UITableView 中选择时不隐藏蓝色分隔线

从 uitableview 隐藏或删除部分