1

我有一个带有 NSOutlineView 的 NSPanel 来显示我的数据。我想在 NSOutlineView 内第一次单击选择一行,即使面板不在焦点(即不是关键窗口)我有一个允许选择的委托,并且我已经覆盖了 NSOutlineView 类以覆盖acceptsFirstMouse:方法,但是我无法获得第一次点击选择。

我检查了 mouseDown 事件,当面板是和不是关键窗口时,它触发没有任何问题(在我的类中覆盖)。但是当面板不是 key 时,NSOutlineViewDelegate 方法 shouldSelectItem: 不会被调用。

我错过了什么/做错了什么?

4

1 回答 1

2

您只需要继承您的 NSTableOutlineView 并覆盖:

- (BOOL)needsPanelToBecomeKey

返回 NO。

NSView 类参考状态:

被子类覆盖以确定接收器是否需要其面板(否则可能会避免成为键)成为键窗口,以便它可以处理键盘输入和导航。

讨论

这样的子类也应该重写 AcceptFirstResponder 以返回 YES。

此方法也用于键盘导航。它确定鼠标单击是否应将焦点放在视图上(使其成为第一响应者)。当您单击某些视图时,它们会希望获得键盘焦点,例如文本字段。其他视图只有在您选择它们​​时才会获得焦点,例如按钮。您不希望仅仅因为单击复选框而将焦点从正在进行编辑的文本字段转移。

资料来源:Apple 文档

于 2013-03-25T12:51:47.863 回答