ios - 从 AppDelegate 添加 3D Touch 快速操作

标签 ios swift

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

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/

相关文章:

objective-c - 从nsstring iOS删除空字符

ios - 在 swift 中获取值(value)的首选方式是什么,var 还是 func?

ios - 应用程序构建在物理设备上,但不是模拟器(没有这样的模块)

iphone - 使用 sqlite3_step(statement) 进行不一致但频繁的 EXC_BAD_ACCESS 访问

ios - 发电机 : The attempted filter operation is not supported for the provided filter argument count

ios - 有没有办法获取 UITableViewCell 的 ID?

ios - 无法在 iPhone 6 中安装我的 ARKit 支持的应用程序,但苹果的演示应用程序在同一部 iPhone 上成功运行

ios - 在 cellForItemAt 中应用时,转换仅适用于 UICollectionView 中的回收 View

ios - FCM 通知问题 - swift3

pattern-matching - 由于 Swift 模式匹配中的顺序导致的意外结果