在编辑模式下,在UITableViewCellSelectionStyleDefault中需要颜色时尝试保留UITableViewCellSelectionStyleNone

时间:2014-10-14 08:47:05

标签: ios objective-c uitableview

设置时我有一个子类UITableViewCell:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

在:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

在表格中我有多个选择,因此我可以从数据源中删除行。

我想要得到的是:

  1. 用户点击单元格,将无法选择。
  2. 当用户处于多选(编辑)模式时,只有原生多选视图为UITableViewCellSelectionStyleDefault,而我设计的单元格不会受到选择样式的影响。
  3. 我该怎么做?

2 个答案:

答案 0 :(得分:2)

最优雅的方法是将selectionStyle逻辑移动到您的子类中。

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    [super awakeFromNib];

    // Set default selection style
    self.selectionStyle = UITableViewCellSelectionStyleNone;
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];

    // Change the selection style based on if the cell is being edited or not
    if (editing) {
        self.selectionStyle = UITableViewCellSelectionStyleDefault;
    } else {
        self.selectionStyle = UITableViewCellSelectionStyleNone;
    }
}

虽然gabbler的方法确实有效,但您必须调用[_tableView reloadData];取消编辑动画。

答案 1 :(得分:0)

我假设当用户未处于编辑模式时,点击单元格会导致无选择。以下是要添加到cellForRowAtIndexPath中的代码:

if (tableView.editing) {
    cell.selectionStyle = UITableViewCellSelectionStyleDefault;
} else {
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

这将使selectionStyle处于编辑模式 默认样式。记得在进入编辑模式时重新加载tableview。