这是一个macOS问题
In
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?
我在用着
func tableViewSelectionDidChange(_ notification: Notification) {
cell.layer?.backgroundColor = mintGreen.cgColor
更改单元格颜色。
选择单元格时是否可以更改颜色?
Thanks
你对此有什么进展吗?
意识到这是一个老问题了,但是我找不到任何地方记录的这个问题的解决方案,所以这就是我想出的:
此代码假设 NSTableView 具有一列,因此您感兴趣的单元格位于零索引列中。它还假设在“theTableView”的委托上引用了 NSTableView。
func tableViewSelectionDidChange(_ notification: Notification) {
// You'd probably want to handle this else statement more elegantly
guard let selected = theTableView?.selectedRow else { return }
if (selected != -1) {
if let numberOfRows = theTableView?.numberOfRows {
let sequenceOfRows = 0..<numberOfRows
for row in sequenceOfRows.reversed() {
if row == selected {
if let cell = theTableView?.view(atColumn: 0, row: selected, makeIfNecessary: false) {
cell.layer?.backgroundColor = NSColor.green.cgColor
}
} else {
if let cell = theTableView?.view(atColumn: 0, row: Int(row), makeIfNecessary: false) {
cell.layer?.backgroundColor = NSColor.clear.cgColor
}
}
}
}
} else {
// No row is selected, so iterate over all and revert background to .clear
if let numberOfRows = theTableView?.numberOfRows {
let sequenceOfRows = 0..<numberOfRows
for row in sequenceOfRows {
if let cell = theTableView?.view(atColumn: 0, row: Int(row), makeIfNecessary: false) {
cell.layer?.backgroundColor = NSColor.clear.cgColor
}
}
}
}
}
这有效,并且从技术上回答了问题,但感觉非常糟糕,必须迭代所有行来评估要更改的背景颜色,并在行选择更改或取消选择行时再次将所有行更改回来。我不禁觉得一定有许多更优雅或更有效的方法来做到这一点,但正如我所说,我自己找不到任何记录。
如果其他人可以更新,如果有另一种更简洁的方法来做到这一点,或者除了 NSTableView 委托之外还有另一种模式来实现这一点,我将不胜感激。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)