这就是我的应用程序的结构。
MainViewController (UITabViewController) --> VC1 (UIViewController) --> AddVC (UIViewController)
--> VC2 (UIViewController)
--> VC3 (UIViewController)
我想向我的应用添加快速操作,以便当我按下 AppDelegate
中的操作按钮时可以访问 AddVC
。
VC1
有一个“添加”按钮,它使用 Segue 转到 AddVC
。
这就是我想要做的:创建 AddVC
View Controller ,然后创建 MainViewController
,并从中检索 VC1
,其中我尝试呈现 AddVC
屏幕。
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
let vc = storyboard.instantiateViewController(withIdentifier: "AddVC") as! AddVC
switch shortcutItem.type {
case "Add":
let mainVC = app?.getRootViewController() as! MainViewController
let vc1 = mainVC.getVC1()
DispatchQueue.main.async {
vc1?.present(vc, animated: true, completion: nil)
}
}
当我这样做时,它总是转到 VC1
View Controller ,而不是 AddVC
,因此不会执行 segue。
我还尝试在 DispatchQueue
中使用 performSegue
,效果相同。
有人知道我如何才能完成这项工作吗?
最佳答案
我猜这是一个时间问题。
最简单的测试方法是将您的 Dispatch
延迟一秒钟(或者无论您的应用启动需要多长时间),然后看看它是否有效。
更好的解决方案是向 VC1
添加一个 shouldGoToAddVC
标志,并在 viewDidAppear
之后执行 present
。
关于ios - 从 AppDelegate 添加 3D Touch 快速操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46818232/