NSOutlineView:有时一行是不可编辑的(只是蜂鸣声)

我有一个基于视图的NSOutlineView,该视图配置了dataSource和委托。它由两列组成,一个自定义NSTableCellView类。

通过选择一行并按【{1】】键可以编辑大纲视图中的条目。一切都是根据文档设置的,并且在大多数情况下都可以正常工作。

但是,有时当我在选择一行时按Return时,单元格的文本字段不会进入编辑模式。它只是发出哔哔声。

我仍然可以通过在文本字段上“长按”来进入编辑模式。由于某些原因,大纲视图有时会Return键事件进行不同的处理。

我捕获了两个堆栈跟踪:

#1按预期工作:

NSOutlineView:有时一行是不可编辑的(只是蜂鸣声)

您可以从Return中看到,该事件最终使单元格的文本字段成为第一响应者。

#2哔哔声

NSOutlineView:有时一行是不可编辑的(只是蜂鸣声)

我在keyDown()处设置了一个断点,您可以看到这次密钥甚至采用了不同的路径。

我怀疑大纲视图或基础NSBeep的内部状态是否混杂在一起...

如何从这里解决此问题?大纲视图需要采取哪些步骤来确定按下Return键后是否可以编辑一行?

更新

我做了更多的调试(感谢@Willeke提供有关断点的提示)。我设法解决了这个问题:

  • 按下返回键
  • NSTableView
  • ...
  • NSOutlineView.keydown
    • 概述视图检查选择了哪一行
  • NSOutlineView.selectedRow
    • 概述视图检索选定的行视图
  • NSOutlineView.rowView(atRow row: Int,makeIfNecessary: Bool)
    • 要求当前行视图作为下一个有效键视图
  • NSTableRowView.nextValidKeyView
    • 现在,此操作有时会返回NSTableRowView.nextKeyView,并且应用会发出哔哔声。在大多数情况下,它会返回包含nil的那一行的NSTableCellView,然后该行将成为第一响应者,因此是可编辑的。

现在的问题是,为什么下一个关键视图NSTextField有时是为什么?我单击大纲视图的行,因此它确实具有焦点/已选中...

gajba 回答:NSOutlineView:有时一行是不可编辑的(只是蜂鸣声)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2393380.html

大家都在问