【问题标题】:Disabling the NSTableView row focus ring禁用 NSTableView 行焦点环
【发布时间】:2015-06-02 06:48:42
【问题描述】:

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

【问题讨论】:

  • 您在哪里尝试将对焦环更改为无?
  • 在 IB 中的 TableViewCells 上以及通过我的表委托中的 shouldEditTableColumn。
  • 你检查过这个方法是否被调用了吗?
  • 不。但我现在做到了。它没有被调用!

标签: macos swift cocoa nstableview


【解决方案1】:

子类化表格视图并实现以下方法:

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

注意:

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

【讨论】:

    【解决方案2】:

    新功能:

    这就是我的做法。 您可以手动处理菜单。子类NSTableRowViewNSTableCellView,然后使用rightMouseDown:mouseDown:(检查控制键),然后通知您的tableViewController(通知或委托)点击。不要忘记传递事件,然后您可以在没有焦点环的表视图上显示带有事件的菜单。 上面的答案比较简单,但可能不会通过审核,正如作者所说。 另外,您可以为每一行显示单独的菜单项(如果您有不同类型的视图)

    旧:

    我认为焦点环是由NSTableRowView 定义的,而不是NSTableCellView,因为它负责整个行。尝试在那里改变对焦环。可以继承NSTableRowView,通过IB或者NSTableViewDelegate的方法添加到tableView中:

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

    【讨论】:

    • 好的,但问题是如何更改 NSTableRowView 子类中的焦点环?似乎没有属性。
    • 我试图复制你正在做的事情。如何实现二次点击?因为我根本没有拿到任何对焦环。
    • “二次点击”是什么意思?你的意思是右键单击?
    • 我在 IB 中的表格视图控制器中添加了一个上下文菜单,并将其连接到那里(菜单、委托、操作),这就是右键单击上下文菜单的工作原理。
    • 好的,抱歉。我不知道NSTableView 上有一个菜单属性。我确实处理了完全不同的右键单击。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多