禁用NSTableView行焦点环

时间:2015-06-02 06:48:43

标签: macos swift cocoa nstableview

当用户右键单击时,如何禁用NSTableView行周围的对焦环?我不能让它消失。将表格中个人NSTableViewCell的焦点圈设置为None无效。

enter image description here

3 个答案:

答案 0 :(得分:2)

我是这样做的。 您可以手动处理菜单。子类NSTableRowViewNSTableCellView,然后使用rightMouseDown:mouseDown:(检查控制键),然后通知您的tableViewController(通知或委托)点击。不要忘记传递该事件,然后您可以在没有聚焦环的情况下在表视图上显示带有事件的菜单。 上述答案更容易,但正如作者所提到的那样,它可能无法通过审查。 另外,您可以显示每行的单个菜单项(如果您有不同种类的视图)

<强>旧

我认为焦点环由NSTableRowView定义,而不是NSTableCellView,因为它负责完整的行。尝试更改那里的聚焦环。您可以继承NSTableRowView并通过IB或NSTableViewDelegate方法将其添加到tableView:

- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row

答案 1 :(得分:1)

对表视图进行子类化并实现以下方法:

- (void)drawContextMenuHighlightForRow:(NSInteger)row {
    // do nothing
}

注意:

  1. 蓝色轮廓不是聚焦环
  2. 这是Apple用于绘制轮廓的未记录的私有方法。提供一个空的实现将阻止绘制任何内容,但我不能100%确定它是否可以通过审核。

答案 2 :(得分:0)

如果你的目标只是显示一个上下文菜单,你也可以试试这个。

  • NSOutlineView换成另一个NSView
  • 覆盖包装器视图上的menuForEvent方法。
  • 不要在大纲视图上设置menu

现在包装器视图显示菜单而不是轮廓视图,因此它不会显示聚焦环。有关如何在菜单事件中查找节点,请参阅How do you add context senstive menu to NSOutlineView (ie right click menu)