objective-c - 在 View Controller 中处理发送给第一响应者的消息

标签 objective-c cocoa nsview first-responder nsviewcontroller

我一定错过了一些简单的东西,但我看不到它。首先,设置:

  • DATreeViewNSView的子类
  • DATreeViewControllerNSViewController的子类
  • MainMenu.xib 有一个 DATreeViewController 实例,该实例配置为从 DATreeView.xib 加载 View
  • MainMenu.xib 还有一个 DendreaAppDelegate 实例,它有一个 DATreeViewController 导出(连接到 MainMenu.xib)。 xibDATreeViewController 实例。
  • Do Something!,一个菜单项,用于向第一响应者发送 doSomething: 消息。
  • 并非巧合的是,DATreeViewController 有一个名为 doSomething: 的操作。

我想要的是 Do Something! 菜单项触发 DATreeViewController 上的 doSomething: 操作,让我们假装我可以'不只是直接设置目标/操作连接。我会在这里停下来问,我的设计完全错误吗?我想做的事是愚蠢/邪恶/可能会让我在上帝眼中蒙羞吗?

没有?伟大的。现在,在我的一生中,我无法使菜单项处于事件状态。我正在 Snow Leopard 上执行此操作,如果这有什么不同的话。

为了实现NSViewNSViewController之间的良好集成,例如管理响应者链,我已经关注 Matt Gallagher's example ,有一个实质性的变化:在 NIB 加载过程中,NSView 似乎没有收到 setViewController: 消息,因此我自己在 DATreeViewController< 中发送该消息loadView 消息。据我所知,在 applicationDidFinishLaunching:

中运行以下代码后
NSView *view = self.treeViewController.view;
[self.window.contentView addSubview:view];

响应者链已按预期设置,即:

NSWindow < NSView < DATreeViewController < DATreeView

我的期望是,作为DATreeViewController是响应者链的一部分,并且作为它响应doSomething:,并且作为它不实现任何验证,我所要做的就是使用 Interface Builder 将 Do Something! 菜单项连接到第一响应者代理,并使用 doSomething: 作为其操作,并且菜单项将自动激活。

我做错了什么?感谢大家的宝贵帮助!

最佳答案

您的观点是否接受并成功成为第一响应者?

关于objective-c - 在 View Controller 中处理发送给第一响应者的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1501804/

相关文章:

c++ - iPhone 游戏 CPU 分析和 pthread_setspecific

objective-c - 如何保持调整大小的窗口的纵横比?

cocoa - 观察 Cocoa 中的键值对多关系

objective-c - cocoa/osx - 阻止 NSTextView 扩展超过其框架尺寸

objective-c - NSView 在 NSSplitView 上设置最小尺寸

objective-c - NSImage + NSColor + 图案

objective-c - Apple 的 BetterAuthorizationSample 在 10.6.6 上不起作用

objective-c - @encode 编译器指令在 Objective-C 中是如何实现的?

objective-c - 无法使用 Cocoa (IOKit) 将数据发送到我的 Arduino Uno

objective-c - 在 NSSearchField 子类的drawRect中设置背景颜色