禁用uitableview高亮显示,但允许选择单个单元格


83

当您点击一个单元格时,该行将被选中并突出显示。现在我想做的是禁用突出显示但允许选择。周围有一种方法。有一个问题可以回答这个问题,但它同时禁用了选择和突出显示。


8
cell.selectionStyle = UITableViewCellSelectionStyleNone;在您的cellForRowAtIndexPath方法中添加此内容
Shruti 2015年

Answers:


180

您可以从Storyboard中将单元格的选择样式设置为“ None”:

看这里

或从代码:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

对于Swift 3:

cell.selectionStyle = UITableViewCellSelectionStyle.none

对于Swift 4及更高版本:

cell.selectionStyle = .none

当我选择“无”时,我将失去突出显示状态的工作能力。我可以使背景为无/白色而不丢失状态吗?
肖恩

这将执行什么功能?我猜“ cellForRowAt”?
丹尼尔·斯普林格

您应该在单元格中而不是在
表格视图中进行

26

UITableViewCellselectedBackgroundView颜色更改为透明。

    let clearView = UIView()
    clearView.backgroundColor = UIColor.clearColor() // Whatever color you like
    UITableViewCell.appearance().selectedBackgroundView = clearView

或设置特定的单元格:

cell.backgroundView = clearView


1
这是最好的选择,因为cell.selectionStyle = UITableViewCellSelectionStyleNone有时会破坏Apple动画逻辑中的某些内容。
Orkenstein '16

然后改用..UITableViewCell.appearance().selectionStyle = .None
vaibhav

如果您在单元格中有可选的东西,这很好用。
马修·科普oraal

优秀的解决方案。将此代码放在单元格的awakeFromNib()函数中可以有效
Dan2899

此选项使表格视图单元格分隔符行不可见。
jonye ._。jin

8

尝试将单元格选择样式设置为“无”-

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

这将解决您的问题



6

对于Swift:

UITableViewCell.selectionStyle = UITableViewCellSelectionStyle.None;

或者,当您快速子类化一个单元格时:

class CustomCell : UITableViewCell {

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        selectionStyle = .None
    }

}


2

要添加自定义颜色,请使用以下代码。并使其透明使用alpha: 0.0

cell.selectedBackgroundView = UIView(frame: CGRect.zero)
cell.selectedBackgroundView?.backgroundColor = UIColor(red:0.27, green:0.71, blue:0.73, alpha:1.0)

如果您使用自定义颜色并希望将其设置为圆角,请使用:

cell.layer.cornerRadius = 8

另外,使用它可以获得更好的动画效果

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    tableView.deselectRow(at: indexPath, animated: true)
}

1

对于那些在Swift 3中寻找编程方式的人

cell.selectionStyle = UITableViewCellSelectionStyle.none


1

您可以在情节提要中设置单元格本身的选择属性 在此处输入图片说明


0

对于Objc:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

- (void)viewDidLoad {
  [super viewDidLoad];
  _tableView.allowsSelection = YES;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    .. .. .. .. 
   [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
   . . . . .. 
}

0

对于Swift 5,最好的方法是:

cell.selectionStyle = .none

-1

这是即使在编辑模式下也能快速运行3的解决方案

cell.selectionStyle = .gray
cell.selectedBackgroundView = {

    let colorView = UIView()
    colorView.backgroundColor = UIColor.black.withAlphaComponent(0.0)
    //change the alpha value or color to match with you UI/UX

    return colorView
}()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.