iOS中ASTableNode多选编辑时ASVideoNode背景色异常问题求助
嘿,这个问题我之前在项目里也遇到过!ASCellNode在开启多选编辑并选中时,会默认触发子节点(包括ASVideoNode)的状态样式变化,导致背景色跑偏。下面给你几个实用的解决思路,你可以根据自己的业务场景选:
1. 自定义ASVideoNode,阻断状态变化对背景色的影响
ASVideoNode继承自ASDisplayNode,父类在高亮/选中状态下会自动修改背景色。我们可以重写相关方法,强制保持背景色不变:
class CustomVideoNode: ASVideoNode { // 初始化时先设置好你需要的默认背景色 override init() { super.init() backgroundColor = .black // 替换成你的目标背景色 } override func setHighlighted(_ highlighted: Bool, animated: Bool) { // 不调用父类方法,避免触发默认的背景色变化 // 如果需要其他高亮逻辑,在这里自己实现即可 } override func setSelected(_ selected: Bool, animated: Bool) { // 若要保留选中的其他逻辑,可调用父类后再强制重置背景色 super.setSelected(selected, animated: animated) backgroundColor = .black } }
之后在Cell里使用这个自定义的CustomVideoNode替代原生的ASVideoNode就行。
2. 在ASCellNode中主动控制子节点样式
如果不想自定义VideoNode,也可以在你的自定义ASCellNode里,监听自身的选中/高亮状态,手动重置VideoNode的背景色:
class VideoCellNode: ASCellNode { let videoNode = ASVideoNode() override init() { super.init() addSubnode(videoNode) videoNode.backgroundColor = .black // 初始化默认色 } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // 不管Cell是否选中,都强制设置VideoNode的背景色 videoNode.backgroundColor = .black } override func setHighlighted(_ highlighted: Bool, animated: Bool) { super.setHighlighted(highlighted, animated: animated) videoNode.backgroundColor = .black } }
这种方式适合需要保留Cell默认选中样式(比如系统自带的勾选框),但只想让VideoNode不受影响的场景。
3. 直接禁用Cell的默认选中样式(简单粗暴版)
如果你的业务不需要Cell在选中时显示默认的背景色变化,直接给CellNode设置selectionStyle = .none就能彻底解决问题:
class VideoCellNode: ASCellNode { override init() { super.init() selectionStyle = .none } }
注意:这个方法会去掉Cell默认的选中高亮效果,如果需要自定义选中标记(比如自己加勾选图标),得额外实现这部分UI。
内容的提问来源于stack exchange,提问作者Nimisha Ranipa
相关产品推荐
相关产品推荐

