我正在使用情节提要开发 Mac 应用程序。我有一个窗口显示NSViewController
作为其内容,其中包含一个“容器视图控制器”,其中嵌入了NSSplitViewController
.
预期的行为是NSSplitViewController
成为响应者链的一部分,这样触发的菜单项toggleSidebar
对第一响应者的操作实际上会折叠该项目NSSplitViewController
被标记为侧边栏。
然而,这根本不会发生,菜单项仍然被禁用。所以我的问题是,我怎样才能得到NSSplitViewController
成为响应者链的一部分?
我注意到也许其中一些解决方案已经起作用,但我改编了一个更通用的答案https://stackoverflow.com/a/30938725/6938357 https://stackoverflow.com/a/30938725/6938357.
我做了一个扩展NSViewController
寻找补充目标。适用于NSSplitViewController
以及任何一般NSViewController
与孩子。
extension NSViewController {
open override func supplementalTarget(forAction action: Selector, sender: Any?) -> Any? {
if let target = super.supplementalTarget(forAction: action, sender: sender) {
return target
}
for child in children {
var target = NSApp.target(forAction: action, to: child, from: sender) as? NSResponder
if target?.responds(to: action) == false {
target = child.supplementalTarget(forAction: action, sender: sender) as? NSResponder
}
if target?.responds(to: action) == true {
return target
}
}
return nil
}
}
如果您只想在单个视图控制器上搜索,请将此实现放在那里。此扩展适用于all NSViewController
s 及其子类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)