如何从AppDelegate返回当前窗口

时间:2018-12-15 11:22:23

标签: swift macos cocoa

在我的 macOS 应用程序中,我正在执行OAuth登录过程。 我通过自定义url接收到url中的代码,从而成功进行了身份验证,通过它我已经可以获取access_token。 我只需在ViewController中单击一个按钮即可开始登录过程。

我登录的系统随后使用注册的自定义url方案进行回答,为我提供了随后必须用于通过access_token请求获得POST的代码。该access_token可以用来进行api调用。

我现在的问题是,由于缺乏有关如何实现其他技术的知识,我目前正在AppDelegate函数application(_ application: NSApplication, open urls: [URL])中执行所有后面的过程。

据我有限的理解,这是处理此问题的方法,但现在 我如何从那里回来掌握当前视图?我真的在为视图控制器生命周期中的部分内容而苦苦挣扎...

2 个答案:

答案 0 :(得分:2)

在AppDelegate中,您可以按以下方式获取对当前窗口的ViewController的引用。将“ MainViewController”替换为您使用的名称。

iOS Swift:

if let vc = window?.rootViewController as? MainViewController {
    // use `vc` here by calling public functions
    // and accessing public properties
}

macOS Swift:

if let vc = NSApplication.shared.mainWindow?.contentViewController as? MainViewController {
    // use `vc` here by calling public functions
    // and accessing public properties
}

答案 1 :(得分:0)

好的,找到它了:由于在macOS-land中没有与iOS一样的rootViewController,因此它的工作方式略有不同:

在macOS中,您可以像这样在“键盘下”掌握当前窗口:

application(_:open:)中,其中redirect_uri被调用:

if let viewController = NSApplication.shared.keyWindow?.contentViewController as? ViewController {
    // make changes to the view
}