And*_*son 3 sorting cocoa binding focus nstableview
我在对话框中有一个NSTableView,它通过"实体名称"模式下的NSArrayController绑定到CoreData模型实例的集合.该表显示name单个列中托管对象数组的s.这很好用.
表格行中的名称是可编辑的.如果用户在没有应用于表的排序时编辑名称,则编辑正常进行.按Return键后,将记录新名称,输入焦点将保留在NSTableView中.但是,如果单击表视图中的列标题以对名称表进行排序,则编辑后输入焦点将误入歧途.它停留在窗口或更宽的视野内(不确定是哪个),但是它会离开桌子; 聚焦环消失,突出显示项目的背景颜色从蓝色变为灰色.按Tab键将输入焦点再次弹回到表格视图中.
仅当对表内容进行排序时才会发生这种情况.如果为绑定选择了"Continuously Updates Value",那么随着输入任何字符的分钟,这是灾难性的,表格视图似乎想要重新排序(没关系)并且焦点跳出它(这不是用户的好处)正在试图输入一些东西).
就系统的这个方面而言,没有代码 - 它都是通过Interface Builder中建立的绑定完成的.据推测,我无意中设置或清除了一些我不应该拥有的选项.
如果它有助于读者弄清楚是什么 - 我还有一个模态表附加到包含NSTableView的对话框.该工作表用于编辑在表视图中选择的项目的详细信息.其中的控件还使用与工作表"后面"对话框相同的NSArrayController与CoreData模型的绑定相关联.可以看到同样的问题 - 只要输入新名称,焦点就会被拉回模态表后面的对话框.
涉及的唯一代码是用于处理"编辑此项目"操作并启动工作表的模态会话.
这是怎么回事?焦点在哪里以及为什么因为在NSTableView中重新排序而被移动?
谢谢!
实体NSArrayController 在相关的Interface Builder检查器面板中勾选了" Auto Rearrange Content ".这不是我认为它会做的事情,也是焦点窃取问题的原因.
我最后通过创建一个简单的CoreData应用程序来缩小范围,该应用程序只是在表视图中添加了名称.几乎不需要代码; 99.5%的Interface Builder和绑定,只有一个额外的插座和一行胶水代码,告诉阵列控制器CoreData模型关于通过Interface Builder自动生成的代码在应用程序委托中实例化的托管对象上下文.在测试程序中设置"Auto Rearrange Content"标志会引发相同的奇怪输入焦点行为.
因此,如果您通过阵列控制器通过绑定到CoreData的对象表来解决问题,请检查阵列控制器的自动重新排列标志!
| 归档时间: |
|
| 查看次数: |
863 次 |
| 最近记录: |