gpt4 book ai didi

cocoa - 当项目更改时,CoreData 绑定(bind)的 NSTableView 会失去输入焦点,但前提是已排序

转载 作者:行者123 更新时间:2023-12-03 16:17:42 26 4
gpt4 key购买 nike

我在对话框中有一个 NSTableView,它通过“实体名称”模式下的 NSArrayController 绑定(bind)到 CoreData 模型实例的集合。该表在一列中显示了托管对象数组的名称。这效果很好。

表格行中的名称是可编辑的。如果用户在没有对表应用排序的情况下编辑名称,则编辑将正常进行。按回车键后,新名称将被记录下来,并且输入焦点将保留在 NSTableView 中。但是,如果单击 TableView 中的列标题来对名称表进行排序,则编辑后输入焦点会误入歧途。它停留在窗口内,或更宽的视野内(不确定是哪一个),但它离开了 table ;聚焦环消失,突出显示项目的背景颜色从蓝色变为灰色。按 T​​ab 键会将输入焦点再次弹出到表格 View 中。

这种情况发生在表格内容已排序的情况下。如果为绑定(bind)选择“连续更新值”,那么这将是灾难性的,因为输入任何字符时, TableView 似乎想要重新排序自身(这是可以的)并且焦点会跳出它(这并不好,因为用户正在尝试输入一些内容)。

就系统的这方面而言,没有任何代码 - 这一切都是通过 Interface Builder 中建立的绑定(bind)完成的。据推测,我无意中设置或清除了一些不应该设置的选项。

如果它可以帮助读者弄清楚发生了什么 - 我还在包含 NSTableView 的对话框中附加了一个模式表。该工作表用于编辑 TableView 中所选项目的详细信息。其中的控件还使用与工作表“后面”的对话框相同的 NSArrayController 与 CoreData 模型的绑定(bind)连接。会出现同样的问题 - 一旦输入新名称,焦点就会拉回到模式表“后面”的对话框。

涉及的唯一代码是用于处理“编辑此项目”操作并启动工作表的模式 session 的代码。

发生什么事了?焦点去哪里了?为什么仅仅因为 NSTableView 中的重新排序而被移动?

谢谢!

最佳答案

实体 NSArrayController 在相关 Interface Builder 检查器面板中勾选了“自动重新排列内容”。这并没有达到我的预期,并且是导致焦点窃取问题的原因。

我最终通过创建一个简单的 CoreData 应用程序来缩小范围,该应用程序只是将名称添加到 TableView 中。几乎不需要任何代码; 99.5% Interface Builder 和绑定(bind),只需一个额外的 socket 和一行粘合代码即可告诉 CoreData 模型的数组 Controller 有关由 Interface Builder 自动生成的代码在应用程序委托(delegate)中实例化的托管对象上下文。在测试程序中设置“自动重新排列内容”标志会引发同样奇怪的输入焦点行为。

因此,如果您遇到通过数组 Controller 绑定(bind)到 CoreData 的对象表出现焦点窃取问题,请检查数组 Controller 的自动重新排列标志!

关于cocoa - 当项目更改时,CoreData 绑定(bind)的 NSTableView 会失去输入焦点,但前提是已排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4923891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com