我正在尝试创建一个基于视图的tableView委托方法来修改列的字体敌我,它的标识符是'name‘,它的值与某些全局值相匹配;否则,nib应该占上风。我想我不是有什么问题,就是我的逻辑漏掉了什么。
我有两个表,一个基于视图(tag=0),一个单元格(tag=1),两个表都有相同的视图控制器作为它们的委托。每个tableView都有一个唯一的标记和标识符,一个列值绑定的数组控制器,每个fits列都有一个显式的唯一标识符--匹配它的绑定;我试过省略它--“自动设置”--但是这没有产生任何数据!?
因此,我添加了这个方法,但是两个tableViews调用都在其中;我只期望第一个调用。第二表是第一列的细节,具有第一阵列控制器的选择。
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let item = ((tableView.dataSource as! NSArrayController).arrangedObjects as! [AnyObject])[row]
var view = tableView.makeView(withIdentifier: tableColumn!.identifier, owner: self)
if view == nil {
Swift.print("tag: \(tableView.tag) ident: \(tableColumn!.identifier.rawValue)")
view = NSTableCellView.init()
view?.identifier = tableColumn?.identifier
}
guard tableView.tag == 0 else { return view }
guard isGlobalPlist, item.name == '<some-global-string>',
let identifier = tableColumn?.identifier,
identifier.rawValue == "name" else { return view }
if let cellView = view as? NSTableCellView {
if tableView.selectedRowIndexes.intersection(IndexSet.init(integer: row)).count > 0 {
cellView.textField?.font = .boldSystemFont(ofSize: -1)
cellView.textField?.textColor = .white
}
else
{
cellView.textField?.font = .systemFont(ofSize: -1)
cellView.textField?.textColor = .blue
}
}
return view
}首先,我注意到第二个表调用了该方法,而不是我所期望的,它是一个基于单元格的tableView。
无论如何,当0返回时,我确实创建了单元格,您只需要匹配标识符,文档就会引用:
Note that a cell view’s identifier must be the same as its table column’s identifier for bindings to work. If you’re using bindings, it’s recommended that you use the Automatic identifier setting in Interface Builder.
我这样做了;使用显式输入的列标识符将两个tableView的列(视图或单元格)绑定到各自的数组控制器。
无论如何,我所追求的最初意图是基于视图的(1) tableView:
以不同的颜色(蓝色/黄色-或其他什么颜色)显示的影响“名称”单元格,这取决于是否由于选择高亮、黑暗模式等条件而选择行。
所以有四种可能性
如果目标行与需求匹配,则颜色需要根据其包含在tableView所选索引中的内容而变化。
该设置似乎正确地影响了最初选定的行和匹配值,但随后设置似乎在导航到的其他行之间流血--因此选择发生了更改。最多应该有带有此影响的1行的name列。
我不知道我的逻辑或设置是否错误;我怀疑我在移动时可能需要刷新?
发布于 2020-01-24 01:23:39
我放弃了基于视图的解决方案,但这满足了我的需要;基于单元格的解决方案:
func tableView(_ tableView: NSTableView, dataCellFor tableColumn: NSTableColumn?, row: Int) -> NSCell? {
guard let column = tableColumn else { return nil }
let item : AnyObject = ([table0ArrayController,table1ArrayController][tableView.tag]?.arrangedObjects as! [AnyObject])[row]
let cell : NSTextFieldCell = column.dataCell(forRow: row) as! NSTextFieldCell
cell.textColor = .textColor
guard tableView.tag == 0, isGlobalPlist, item.name == '<some-global-string>' else { return cell }
if tableView.selectedRowIndexes.intersection(IndexSet.init(integer: row)).count > 0 {
cell.textColor = .white
}
else
{
cell.textColor = .blue
}
return cell
}我想提请注意特定行的颜色,除非行是为“名称”列选择的。
https://stackoverflow.com/questions/57940370
复制相似问题