禁用 NSTableView 行焦点环
Disabling the NSTableView row focus ring
如何在用户右键单击 NSTableView
行时禁用焦点环?我不能让它消失。将table中个人NSTableViewCell
的对焦环设置为None
没有效果。
新:
这是我的做法。
您可以手动处理菜单。子类 NSTableRowView
或 NSTableCellView
,然后使用 rightMouseDown:
和 mouseDown:
(检查控制键)然后通知您的 tableViewController(通知或委托) 的点击次数。不要忘记也传递该事件,然后您可以在 table 视图上显示带有事件的菜单,而无需聚焦环。
上面的答案比较简单,但是也可能像作者说的那样,过不了审。
另外,您可以为每一行显示单独的菜单项(如果您有不同类型的视图)
旧:
我认为聚焦环是由NSTableRowView
定义的,而不是NSTableCellView
,因为它负责整行。尝试在那里更改对焦环。您可以继承 NSTableRowView
并通过 IB 或 NSTableViewDelegate
的方法将其添加到 tableView:
- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
子类化 table 视图并实现以下方法:
- (void)drawContextMenuHighlightForRow:(NSInteger)row {
// do nothing
}
注意:
- 蓝色轮廓不是对焦环。
- 这是 Apple 用于绘制轮廓的未记录私有方法。提供一个空的实现会阻止任何东西被绘制,但我不能100%确定它是否能通过审查。
如果您的目标只是显示上下文菜单,您也可以试试这个。
- 将
NSOutlineView
包裹在另一个 NSView
中。
- 覆盖包装器视图上的
menuForEvent
方法。
- 不要在大纲视图上设置
menu
。
现在包装视图显示菜单而不是大纲视图,因此它不会显示聚焦环。有关如何在菜单事件中查找节点的信息,请参阅 How do you add context senstive menu to NSOutlineView (ie right click menu)。
如何在用户右键单击 NSTableView
行时禁用焦点环?我不能让它消失。将table中个人NSTableViewCell
的对焦环设置为None
没有效果。
新:
这是我的做法。
您可以手动处理菜单。子类 NSTableRowView
或 NSTableCellView
,然后使用 rightMouseDown:
和 mouseDown:
(检查控制键)然后通知您的 tableViewController(通知或委托) 的点击次数。不要忘记也传递该事件,然后您可以在 table 视图上显示带有事件的菜单,而无需聚焦环。
上面的答案比较简单,但是也可能像作者说的那样,过不了审。
另外,您可以为每一行显示单独的菜单项(如果您有不同类型的视图)
旧:
我认为聚焦环是由NSTableRowView
定义的,而不是NSTableCellView
,因为它负责整行。尝试在那里更改对焦环。您可以继承 NSTableRowView
并通过 IB 或 NSTableViewDelegate
的方法将其添加到 tableView:
- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
子类化 table 视图并实现以下方法:
- (void)drawContextMenuHighlightForRow:(NSInteger)row {
// do nothing
}
注意:
- 蓝色轮廓不是对焦环。
- 这是 Apple 用于绘制轮廓的未记录私有方法。提供一个空的实现会阻止任何东西被绘制,但我不能100%确定它是否能通过审查。
如果您的目标只是显示上下文菜单,您也可以试试这个。
- 将
NSOutlineView
包裹在另一个NSView
中。 - 覆盖包装器视图上的
menuForEvent
方法。 - 不要在大纲视图上设置
menu
。
现在包装视图显示菜单而不是大纲视图,因此它不会显示聚焦环。有关如何在菜单事件中查找节点的信息,请参阅 How do you add context senstive menu to NSOutlineView (ie right click menu)。