【问题标题】:completion handler to presentViewControllerAsSheet OSXpresentViewControllerAsSheet OSX 的完成处理程序
【发布时间】:2018-06-26 10:22:51
【问题描述】:

我正在从另一个 ViewController 呈现 NSViewController

[self presentViewControllerAsSheet:secondViewController];

这里是NSWindow的方法

- (void)beginSheet:(NSWindow *)sheetWindow 
 completionHandler:(void (^)(NSModalResponse returnCode))handler;

是否有与上述 For NSViewController 具有完成处理程序的等效方法。

【问题讨论】:

  • 请看stackoverflow.com/questions/31445785/…。它适用于 Swift,但模式是一样的。
  • 我已经完成了。但我想知道有没有其他方法或苹果方法,如 - (void)beginSheet:(NSWindow *)sheetWindow completionHandler:(void (^)(NSModalResponse returnCode))handler;对于 NSViewController
  • 不,没有带有完成处理程序的 API,您必须编写自己的逻辑。
  • 感谢 vadian 的帮助。

标签: objective-c cocoa nswindow nsviewcontroller


【解决方案1】:

这就够了吗?

class SOMEViewController: NSViewController {
    private var parentWindow : NSWindow? = nil

    public func beginSheetModal(for parentWindow: NSWindow, 
                                handler : @escaping (NSApplication.ModalResponse) -> Void) {
        self.parentWindow = parentWindow
        guard let sheet = self.view.window else { return }

        parentWindow.beginSheet(sheet, completionHandler: handler)
    }

    public func endSheet(_ response : NSApplication.ModalResponse) {
        guard let parent = self.parentWindow else { return }
        guard let sheet = self.view.window else { return }

        parent.endSheet(sheet, returnCode: response)
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    相关资源
    最近更新 更多