NSTableView - 初始选择灰色,直到点击(焦点)
Posted
技术标签:
【中文标题】NSTableView - 初始选择灰色,直到点击(焦点)【英文标题】:NSTableView - Initial Selection Grey until Clicked (Focussed) 【发布时间】:2015-11-24 12:48:08 【问题描述】:我在这里有一个简单的应用示例,我将它拼凑在一起,我得到的几乎就是我想要的。
问题是当视图加载时,在 NSViewController 的 viewDidLoad 中,我将 tableView 的选定索引设置为 0,即第一项(有效)。
我注意到的是,当这种情况发生时,所选行显示为灰色(即好像它不是活动窗口/视图)......当我物理单击时,它似乎仅以正常的蓝色突出显示在选定的行上。
我可以确认行 被选中并且一切正常。
有什么想法吗?
为了确认,我用来选择行的代码是:
override func viewDidAppear()
self.tableView.selectRowIndexes(NSIndexSet(index: 0), byExtendingSelection: false)
以下是实际视图本身发生的情况:
上图:较深的灰色线是“选择栏”。这就是视图一旦激活就会发生的情况。
上图:一旦我点击那一行(曾经是深灰色的那一行),我就会得到他想要的高光......即海军蓝。
【问题讨论】:
【参考方案1】:单元格是灰色的原因是因为表格视图没有焦点/不是第一响应者。
tableView单元格选择颜色有3种状态
无选择 = 清除行背景
选择和焦点 = 蓝色行背景
选择和无焦点 = 灰色行背景
这可能是因为另一个视图有焦点。简单地选择一个单元格不会将焦点转移到 tableView。你需要调用 NSWindow.makeFirstResponder() 来改变焦点。
func tableViewSelectionDidChange(notification: NSNotification)
let tableView = notification.object as! NSTableView
if tableView.selectedRow != -1
self.window!.makeFirstResponder(self.tableView)
【讨论】:
【参考方案2】:我已经设法找出发生了什么事。 (我认为)而且它似乎有效。
我不得不:
-
子类
NSTableRowView
在 Interface Builder 中的实际单元格视图(行)下方添加一个新的 NSView
将新行视图的类设置为“myNSTableViewSubClass”
设置 row view 的 Identifier 为:NSTableViewRowViewKey
(这个很具体,字面意思就是key,如果不设置,就认为是Table Row View不起作用。
在子类中,我必须重写 emphasised: Bool
以始终返回 yes,例如:
override var emphasized: Bool
get
return true
set
//You need to have the "set" there as it's a mutable prop
//It doesn't have to do untying though
然后瞧……
在我的案例中,问题在于上面的 4。
【讨论】:
以上是关于NSTableView - 初始选择灰色,直到点击(焦点)的主要内容,如果未能解决你的问题,请参考以下文章
用内容重新加载我的 tableView 后,它仍然显示为灰色,直到我点击它..为啥?
Swift NSTableview 拖动选择多行而不是拖出表格