繁体   English   中英

从AppDelegate添加3D Touch快速动作

[英]Add 3D Touch Quick Actions from AppDelegate

这就是我的应用程序的结构。

MainViewController (UITabViewController) --> VC1 (UIViewController) --> AddVC (UIViewController)  
                                         --> VC2 (UIViewController)  
                                         --> VC3 (UIViewController)

我想向我的应用程序添加快速操作,因此当我从AppDelegate按下操作按钮时,可以访问AddVC
VC1有一个Add按钮,该按钮使用segue转到AddVC

这就是我要尝试的方式:创建AddVC视图控制器,然后创建MainViewController并从中检索VC1 ,并尝试使用该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 ,因此不会执行segue。
我也尝试在DispatchQueue内使用performSegue ,效果相同。

任何人都知道我该如何进行这项工作?

我猜这是一个时间问题。

测试的骇客方式只是将您的Dispatch延迟一秒钟(或启动应用程序需要花费很长时间),然后查看它是否可以正常工作。

更好的解决方案是在VC1添加一个shouldGoToAddVC标志,并在viewDidAppear之后执行present

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM