【发布时间】:2011-02-07 16:45:17
【问题描述】:
我在对话框中有一个 NSTableView,它通过“实体名称”模式下的 NSArrayController 绑定到 CoreData 模型实例的集合。该表在单个列中显示托管对象数组的names。这很好用。
表格行中的名称是可编辑的。如果用户在没有对表格应用排序的情况下编辑名称,则编辑会正常进行。按下 Return 后,新名称被记录下来,输入焦点停留在 NSTableView 中。但是,如果单击表视图中的列标题以对名称表进行排序,则输入焦点在编辑后会误入歧途。它停留在窗口内,或者更广阔的视野(不确定是哪个),但它离开了桌子;聚焦环消失,突出显示的项目的背景颜色从蓝色变为灰色。按 Tab 会将输入焦点再次弹出到表格视图中。
这仅在表格内容已排序时发生。如果为绑定选择了“持续更新值”,那么在输入任何字符的那一刻,表格视图似乎想要重新排序(没关系)并且焦点跳出它(这对用户来说不合适)正在尝试输入内容)。
就系统的这一方面而言,没有代码——这一切都是通过在 Interface Builder 中建立的绑定完成的。大概是我无意中设置或清除了一些我不应该拥有的选项。
如果它可以帮助读者弄清楚发生了什么 - 我还有一个模式表附加到包含 NSTableView 的对话框中。该工作表用于编辑在表格视图中选择的项目的详细信息。这里的控件也使用与工作表“后面”对话框相同的 NSArrayController 与 CoreData 模型的绑定连接。出现了同样的问题 - 一旦输入新名称,焦点就会被拉回到模式表“后面”的对话框。
唯一涉及的代码是用于处理“编辑此项目”操作并启动工作表的模式会话的代码。
发生了什么事?焦点在哪里,为什么仅仅因为在 NSTableView 中重新排序而被移动?
谢谢!
【问题讨论】:
标签: cocoa sorting binding focus nstableview