gpt4 book ai didi

cocoa - NSTableView,NSArrayController 并仅在按键后重新加载?

转载 作者:行者123 更新时间:2023-12-03 17:44:58 24 4
gpt4 key购买 nike

我有以下情况:

  1. 第一个窗口内有一个包含 NSTableView 的自定义 View 。
  2. 在第一个窗口内选择表格 View 之后,还有第二个窗口充当当前对象的表单。

更多细节:

  • 我已经在 NSTableView 中实现了 setDoubleAction: 行为,基本上打开了第二个窗口
  • 表格 View 绑定(bind)到(子类化)NSArrayController 的排列对象
  • 第二个窗口(双击打开)中的特定界面元素绑定(bind)到 NSArrayController 的选择
  • 我对 NSArrayController 进行了子类化并修改了以下函数:

一开始我改变了addObject:(或者add:,这并不重要):

- (void)addObject:(id)object
{
[super addObject:object];
[self saveTemplatesToDisk];
}

然后我更改了删除:

- (void)remove:(id)sender
{
[super remove:sender];
[self saveTemplatesToDisk];
}
  • 打开首选项表的操作只是一个行:[NSApp beginSheet:preferenceWindow modalForWindow:[_preferenceView window] modalDelegate:nil didEndSelector:NULL contextInfo:NULL];
  • 用户按下返回键/确定按钮后执行的代码也不复杂。

它只是将阵列 Controller 的当前内容保存到磁盘并关闭第二个窗口:

- (IBAction)endPreferenceSheet:(id)sender
{
[templateArrayController saveTemplatesToDisk];

[NSApp endSheet:preferenceWindow];
[preferenceWindow orderOut:nil];
}

最后这是我的问题

当我在第二个窗口中按返回键时,窗口关闭,数据被保存,并且 NSTableView 被正确重新加载,无需任何进一步的交互。但是当我用鼠标按下“确定”按钮时,似乎什么也没有发生。这是有趣的部分:当我现在在第二个窗口消失后在第一个窗口的 TableView 中选择另一行时,先前选择的行(读取:更新的对象)会正确重新加载并显示我在第二个窗口中编辑的内容界面元素绑定(bind)到所选内容的窗口。

基本上我的实现可以工作,但当用户使用鼠标关闭窗口时则不起作用。

我能发现的唯一区别是 currentEvent,但我无法想象这会如何改变这个简单应用程序的行为。

  • 当我用鼠标按下“确定”按钮时: NSEvent: type=LMouseUp loc=(563.055,30.1484) time=58450.2 flags=0 win=0x0 winNum=5371 ctxt=0x0 evNum=8093 click=1 buttonNumber =0 压力=0 子类型=NSTabletPointEventSubtype deviceID=0 x=19469 y=15838 z=0 按钮=0x0 压力=0.000000 倾斜={0.453108, -0.140629} 旋转=0.000000 切向压力=0.000000 供应商1-3=(0, 0, 0 )
  • 当我按回车键时: NSEvent: type=KeyDown loc=(0,300) time=58474.8 flags=0 win=0x0 winNum=5371 ctxt=0x0 chars="
    “unmodchars=”
    “重复=0 keyCode=36

有什么想法可以解决我的问题吗?

最佳答案

记住响应者链:键盘事件从第一个响应者开始,这将是字段编辑器,然后(如果不能处理它)转到下一个响应者,这将是 TableView 。鼠标事件直接进入用户点击的 View ,即按钮。

所以,不同之处在于 TableView 处理返回事件,但它永远不会看到鼠标事件。当用户单击时,您只需从按钮获取一条操作消息 - 表格 View 仍处于编辑模式。

解决方案是让操作方法告诉 Controller commit editing在进行实际操作之前。

关于cocoa - NSTableView,NSArrayController 并仅在按键后重新加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2561680/

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