我使用 NSOutlineView 在我的 C#/MonoMac 应用程序中创建了一个侧边栏,并获得了创建问题Create NSView programmatically in Xamarin Studio中的项目的帮助。但是现在我已经使大纲视图中的一些项目可编辑,当然我想检测项目何时被编辑并采取行动(编辑底层模型,或者如果编辑了特殊的“创建新”项目,则创建一个新模型)。
这些项目可以通过双击或在选中时按回车进行编辑。但我不知道如何检测何时在我的代码中编辑了项目。我试图在我的 NSOutlineViewDataSource 中覆盖 CommitEditing,并在我的 NSOutlineViewDelegate 中覆盖 CommitEditing 和 ShouldEditTableColumn。这些似乎都没有被调用。
我还尝试将 EditingEnded 的事件处理程序连接到 NSTextField,这是我在 NSOutlineViewDelegate.GetView 方法中调用 MakeView 时获得的视图的子视图。但这会使应用程序崩溃。当我尝试设置 NSTextField 的委托并在其中覆盖 EditingEnded 或 TextShouldEndEditing 时,我也会崩溃。进入编辑模式后,只要我按下一个键,就会发生崩溃。
现在我迷路了。感觉好像我什么都试过了。
如果您想查看这里的代码:
这是我使用此代码订阅 Changed 事件时的崩溃:
// ...
view = outlineView.MakeView ("DataCell", this);
((NSTextField)view.Subviews [1]).Changed += foo;
}
private void foo(object sender, EventArgs e) {
Console.WriteLine("changed text field.");
};
2013-08-02 08:53:32.851 Stoffi[6582:1007]-[__NSCFType controlTextDidEndEditing:]:无法识别的选择器发送到实例 0x16a6c40 2013-08-02 08:53:32.852 Stoffi [6582:1007] 处理键输入时检测到异常。 2013-08-02 08:53:32.852 Stoffi[6582:1007]-[__NSCFType controlTextDidEndEditing:]:无法识别的选择器发送到实例 0x16a6c40 2013-08-02 08:53:32.863 斯托菲[6582:1007] ( 0 核心基础 0x9966be8b __raiseError + 219 1 libobjc.A.dylib 0x98a8f52e objc_exception_throw + 230 2核心基础0x9966fafd-[NSObject(NSObject)不识别选择器:]+253 3 核心基础 0x995b7e87 ___转发___ + 487 4 核心基础 0x995b7c32 _CF_forwarding_prep_0 + 50 5 基础 0x93d36e52 __57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_0 + 49 6 核心基础 0x9962d851 ___CFXNotificationPost_block_invoke_0 + 257 7 核心基础 0x99578e8a _CFXNotificationPost + 2794 8 基础 0x93d1f988 -[NSNotificationCenter postNotificationName:object:userInfo:] + 92 9 AppKit 0x972b9926-[NSTextField textDidEndEditing:] + 405 10 基础 0x93d36e52 __57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_0 + 49 11 核心基础 0x9962d851 ___CFXNotificationPost_block_invoke_0 + 257 12 核心基础 0x99578e8a _CFXNotificationPost + 2794 13 基础 0x93d1f988 -[NSNotificationCenter postNotificationName:object:userInfo:] + 92 14 AppKit 0x96fd762b-[NSTextView(NSPrivate)_giveUpFirstResponder:] + 434 15 AppKit 0x96fd746f-[NSTextView(NSKeyBindingCommands) insertNewline:] + 580 16 libobjc.A.dylib 0x98a9c5d3-[NSObject performSelector:withObject:] + 70 17 AppKit 0x96fd714e-[NSResponder doCommandBySelector:] + 91 18 AppKit 0x96fd6f83-[NSTextView doCommandBySelector:] + 152 19 AppKit 0x97067fe3-[NSTextInputContext doCommandBySelector:] + 121 20 AppKit 0x97067f5d-[NSTextInputContext _handleCommand:] + 84 21 AppKit 0x97062929-[NSKeyBindingManager(NSKeyBindingManager_MultiClients) 解释EventAsCommand:forClient:] + 2006 22 AppKit 0x97061db5-[NSTextInputContext 句柄事件:] + 1298 23 AppKit 0x97061825-[NSView 解释键事件:] + 205 24 AppKit 0x96fa43b8-[NSTextView keyDown:] + 680 25 AppKit 0x971c8af1 -[NSWindow 发送事件:] + 7432 26 AppKit 0x971c390f -[NSApplication 发送事件:] + 4278 27 AppKit 0x970dd62c -[NSApplication 运行] + 951 28 AppKit 0x970805f6 NSApplicationMain + 1053 29 ???0x060c9e76 0x0 + 101490294 30 ???0x060c9c70 0x0 + 101489776 31 ???0x007beff8 0x0 + 8122360 32 ???0x007bf156 0x0 + 8122710 33 libmono-2.0.dylib 0x0100be52 mono_jit_runtime_invoke + 722 34 libmono-2.0.dylib 0x011a767a mono_runtime_invoke + 170 35 libmono-2.0.dylib 0x011aa1f1 mono_runtime_exec_main + 705 36 libmono-2.0.dylib 0x011a9401 mono_runtime_run_main + 929 37 libmono-2.0.dylib 0x010695e5 mono_jit_exec + 149 38 libmono-2.0.dylib 0x0106bb79 mono_main + 9609 39 斯托菲 0x0000308f 主要 + 2047 40 斯托菲 0x00002885 开始 + 53 )