这就是我的应用程序的结构。
MainViewController (UITabViewController) --> VC1 (UIViewController) --> AddVC (UIViewController)
--> VC2 (UIViewController)
--> VC3 (UIViewController)
我想向我的应用添加快速操作,因此当我从AddVC
按动作按钮时,我可以访问AppDelegate
。
VC1
有一个添加按钮,使用segue转到AddVC
。
这就是我要尝试的方法:创建AddVC
视图控制器,然后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
执行此操作时,它始终转到AddVC
视图控制器,但不转到performSegue
,因此不执行segue。
我也尝试在DispatchQueue
内使用45
,效果相同。
任何人都知道如何才能完成这项工作?
答案 0 :(得分:0)
我猜这是一个时间问题。
测试的hacky方法只是将你的Dispatch
延迟一秒钟(或者你的应用程序需要多长时间才能启动)并查看它是否有效。
更好的解决方案是在shouldGoToAddVC
添加VC1
标记,在present
之后添加viewDidAppear
。