macOS Sonoma沙盒应用中NSSavePanel带accessoryView时触发默认保存动作的Workaround可行性问询
macOS Sonoma沙盒应用中NSSavePanel带accessoryView时触发默认保存动作的Workaround可行性问询
各位好,我最近碰到了macOS Sonoma上的一个奇怪bug:在沙盒化的应用里,当NSSavePanel添加了accessoryView之后,按下回车键没法触发默认的保存动作,但这个功能在Ventura及更低版本的系统里都是正常工作的。
我排查了一下,按回车本来应该会在NSResponder响应链中调用performKeyEquivalent:方法,但现在因为accessoryView的存在,这个流程在Sonoma里失效了。
我自己想了一个 workaround 思路:在响应链中拦截回车键(包括小键盘的回车)事件,手动调用NSSavePanel的performKeyEquivalent(with:)方法,代码如下:
import Carbon.HIToolbox.Events override func performKeyEquivalent(with event: NSEvent) -> Bool { if let savePanel, event.type == .keyDown && (event.keyCode == UInt16(kVK_Return) || event.keyCode == UInt16(kVK_ANSI_KeypadEnter)) { savePanel.performKeyEquivalent(with: event) } else { super.performKeyEquivalent(with: event) } }
想请教一下大家,这个方案在沙盒应用里是可行的吗?直接这么写能不能解决这个问题?
(附上相关界面截图:)
NSSavePanel带accessoryView的界面
备注:内容来源于stack exchange,提问作者Marek H
相关产品推荐
相关产品推荐

