【发布时间】:2018-03-15 09:13:50
【问题描述】:
我希望 ViewController (ContainerVC) 对子自定义视图 (ChildView) 的点击做出反应。
在 ChildView 中,我覆盖 mouseDown(_:) 来处理点击。在这种方法中,我尝试通过 NSApp.sendAction(#selector(ContainerVC.childViewClicked(_:)), to: nil, from: self) 调用 ContainerVC 目标。
由于某种原因,sendAction 方法首先失败(即返回 false)。 NSApp.target(forAction: #selector(ContainerVC.childViewClicked(_:)) 也为零。
一段时间后(通常是在我疯狂地点击自定义视图一段时间后),目标得到解决,一切正常,ContainerVC.childViewClicked(_:) 被调用。
在解决目标的时间/多少次点击后,我找不到系统模式(除了我对着我的 mac 大喊大叫的强度)。
有趣的是,当我通过 let window = NSWindow(contentViewController: ContainerVC()) 将 ContainerVC 添加到窗口时,它工作正常。
当我将 ContainerVC 添加到拆分视图时,会出现上述奇怪行为:
self.addSplitViewItem(NSSplitViewItem(viewController: ContainerVC())
我检查了 CustomView 的响应者链。 ContainerVC 按预期出现在链中。链中没有其他类实现 childViewClicked(_:)。
如果有人能告诉我 NSApp.sendAction(_:) 的内部工作原理以及为什么最初的目标为零,我将不胜感激。
在将 ViewController 添加到 SplitView 以正确连接时是否需要额外的步骤?
【问题讨论】:
标签: macos cocoa nssplitview responder-chain