在编辑模式下禁用表格视图单元格突出显示的颜色?
Posted
技术标签:
【中文标题】在编辑模式下禁用表格视图单元格突出显示的颜色?【英文标题】:Disable tableview cell highlighted color in edit mode? 【发布时间】:2018-03-27 17:03:19 【问题描述】:如何在编辑模式下删除表格视图单元格突出显示的颜色。我在编辑模式下使用表格视图属性“allowsMultipleSelection”。默认情况下,单元格以浅蓝色突出显示。尽管我们可以更改突出显示的颜色,但我没有看到任何删除突出显示颜色属性的选项。我只希望我的表格视图单元格复选框选择而不是突出显示模式。
“cell.SelectedBackgroundView”允许在选中单元格时更改单元格的背景颜色,但我只想选择复选框,而处于选中状态的单元格没有颜色。
附加的屏幕图像。在我的情况下,单元格有一个背景图像,所以在选择时我也希望单元格背景相同,并且只选择复选框。
【问题讨论】:
在cellForRowAtIndexPath
中尝试cell?.selectionStyle = .none
,或者您也可以禁用从情节提要中选择单元格。
@AnkitJayaswal 我不想禁用单元格选择,而是想禁用在选择时“突出显示”的单元格。 cell?.selectionStyle = .none 禁用选择本身。
selectionStyle
仅表示样式,您几乎没有选项可以在选择时突出显示您的单元格。如果将其设置为.none
,它只会阻止在选择时显示颜色。但是选择会正常工作,您可以通过在 didSelectRowAtIndexPath
中应用 breakpoint
来看到这一点
@AnkitJayaswal 我正在使用 UITableview (AllowsMultipleSelectionDuringEditing) 提供的默认编辑属性,在这种情况下,单元格选择仅由 tableview 处理。因此,如果我们给出“.none”,则选择本身不会发生。
可以共享现有的委托数据源方法吗?
【参考方案1】:
UITableViewCell
具有selectionStyle
属性以突出显示所选单元格。这些样式用如下颜色突出显示单元格:
蓝色、灰色、默认(浅灰色)、无
在选择.none
样式时,它只会阻止突出显示单元格。它不会阻止选择。您可以通过在didSelectRowAt indexPath:
函数中应用断点来查看:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
print("UITableView Selected")
【讨论】:
【参考方案2】:在您的单元格类中重写此方法:
override func setHighlighted(_ highlighted: Bool, animated: Bool)
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: false)
let viewForHighlight = UIView()
self.selectedBackgroundView = viewForHighlight
if self.isEditing
viewForHighlight.backgroundColor = UIColor.clear
else
viewForHighlight.backgroundColor = UIColor.gray
【讨论】:
这很好用。我正在使用 UITableViewController 并在正常选择单元格时推送另一个视图控制器。当我返回主视图控制器时,我发现该单元格在此更改后突出显示。将 setHighlighted 更改为此似乎可以为我解决问题。 if !isEditing super.setHighlighted(highlighted, animated: animated) 【参考方案3】:我会看看这个委托方法:tableView(_:shouldHighlightRowAt:) 您可以通过在所需状态下返回 false 来检查您是否正在编辑和完全禁止突出显示。
【讨论】:
会检查的。谢谢。 试过这个方法,但是如果我在这个方法上返回“false”,单元格的选择就会被禁用。【参考方案4】:如果您尝试完全删除选择,则可以使用以下代码
对于 Swift 3 cell.selectionStyle = UITableViewCellSelectionStyle.none
对于 Swift 4 cell.selectionStyle = .none
【讨论】:
不,我希望选择发生,但不希望单元格突出显示。我只想要复选框刻度线。【参考方案5】:还有一个选择是使用(在 Objective-C 中,你当然可以在 Swift 中做类似的事情):
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
根据您的模型或数据或其他任何内容,在此方法中您可以选中或取消选中每个单元格中的框,以及关闭突出显示。
来自文档:
表格视图在使用单元格绘制行之前将此消息发送给其委托人,从而允许委托人在单元格对象显示之前对其进行自定义。此方法使委托有机会覆盖先前由表视图设置的基于状态的属性,例如选择和背景颜色。代理返回后,表格视图仅设置 alpha 和 frame 属性,然后仅在行滑入或滑出时设置动画。
【讨论】:
自从我昨天输入答案以来,已经添加了很多新信息。我现在更清楚你在寻找什么,我认为我的答案不是正确的方法。【参考方案6】:试试这个方法,我刚刚检查过,它可以按你的需要工作:
func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool
let cell = tableView.cellForRow(at: indexPath)
let selectedColor: UIColor
let selectedView = UIView(frame: CGRect.zero)
if tableView.isEditing == true
selectedColor = .clear
else
selectedColor = .lightGray
selectedView.backgroundColor = selectedColor
cell?.multipleSelectionBackgroundView = selectedView
return true
【讨论】:
@anovoselov 这不起作用,在这种情况下,单元格选择本身也被禁用。 @anovoselov 会检查一下。 @subin272 你做了什么? @Daedelus 在表格视图提供的默认编辑模式下,我们无法更改选择时的突出显示颜色。我们必须使用自定义单元格以编程方式实现编辑模式。 @subin272 如果您使用 UIImageView 作为背景,突出显示不会打扰您。我尝试并“终于”成功了。【参考方案7】:在 ios 14 及更高版本中,您现在可以在 UITableViewCell
子类中简单地执行此操作:
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?)
super.init(style: style, reuseIdentifier: reuseIdentifier)
// Prevent cell highlighting while preserving selectability and separator views
var backgroundConfig = UIBackgroundConfiguration.listPlainCell()
backgroundConfig.backgroundColor = .clear
backgroundConfiguration = backgroundConfig
有关同样适用于 iOS 13 及更低版本的解决方案,请参阅https://***.com/a/64582629/171933
【讨论】:
以上是关于在编辑模式下禁用表格视图单元格突出显示的颜色?的主要内容,如果未能解决你的问题,请参考以下文章