从 App Delegate 打开导航控制器
Posted
技术标签:
【中文标题】从 App Delegate 打开导航控制器【英文标题】:Open Navigation Controller from App Delegate 【发布时间】:2017-09-28 14:53:31 【问题描述】:我已经实现了一个 URL 方案,用于在付款后重定向回我的应用程序。当网页直接返回我的应用程序时,应用程序应该在当前视图上打开一个导航控制器。 (所以打开它模式)。
如何通过func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool
-方法中的 AppDelete 执行此操作?
提前致谢!
【问题讨论】:
Opening view controller from app delegate using swift的可能重复 @the4kman 嗨,不同的是我想在当前视图上打开它。 您的目标版本是什么?比 ios 9 高吗? @MassimilianoDelMaestro 是的! iOS 10+ @RickdeJong 然后要小心,无论您使用何种方法以模态方式呈现您的视图,方法“application(_ application:open:sourceApplication:annotation:) -> Bool”自 iOS 9 起已弃用。请改用较新的“application(_:open:options:)”。 【参考方案1】:您是在使用情节提要还是在委托中手动创建窗口?如果您有权访问该窗口,则可以这样做:
window?.rootViewController?.present(yourViewController, animated: true, completion: nil)
否则,它应该适用于所有情况:
UIApplication.shared.keyWindow?.rootViewController?.present(yourViewController, animated: true, completion: nil)
【讨论】:
您好!我正在使用故事板。是否可以通过模态转换来做到这一点? 这是一个模态转换。您可以通过yourViewController. modalTransitionStyle
自定义它或自定义 yourViewController. modalPresentationStyle
【参考方案2】:
如果提交请求的视图控制器应该显示模式,我会建议一种不同的方法。我建议在通知中心定义一个通知,用于通知当前视图控制器。
在您的视图控制器中,调用通知中心方法之一,例如addObserver(forName:object:queue:using:)
以观察您的通知。
然后,当您获得预期的 URL 时,从您的应用代理的 application(_:open:options:)
实现中调用 Notification
之类的 post(name:object:)
方法。
【讨论】:
以上是关于从 App Delegate 打开导航控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何从“菜单”视图控制器在现有 UIViewControllers 之间导航?