从 AppDelegate 添加 3D Touch 快速操作
Posted
技术标签:
【中文标题】从 AppDelegate 添加 3D Touch 快速操作【英文标题】:Add 3D Touch Quick Actions from AppDelegate 【发布时间】:2017-10-18 19:57:58 【问题描述】:这就是我的应用的结构。
MainViewController (UITabViewController) --> VC1 (UIViewController) --> AddVC (UIViewController)
--> VC2 (UIViewController)
--> VC3 (UIViewController)
我想向我的应用程序添加快速操作,因此当我按下来自AppDelegate
的操作按钮时,我可以访问AddVC
。VC1
有一个使用 segue 转到 @ 的添加按钮987654325@.
这就是我想要做的:创建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
,因此不执行segue。
我还尝试在DispatchQueue
中使用performSegue
,效果相同。
有人知道我怎样才能完成这项工作吗?
【问题讨论】:
【参考方案1】:我猜这是时间问题。
测试的老套方法就是将您的Dispatch
延迟一秒钟(或者无论您的应用启动需要多长时间),然后看看它是否有效。
更好的解决方案是将shouldGoToAddVC
标志添加到VC1
并在viewDidAppear
之后执行present
。
【讨论】:
我不确定我是否理解。我的应用程序已经启动。我只是退出它并在图标上进行 3D 触摸并按下我的按钮。我不确定为什么会出现时间问题。 因为 VC1 还没有出现在屏幕上。在应用程序的完全激活完成和应用程序完成主屏幕的动画之前,它将无法导航到新的 VC。另请注意,当发生快速操作时,您的应用可能无论如何都无法运行。 哦,我明白你的意思了。我添加了一个 sleep(3) 并收到此警告:尝试在以上是关于从 AppDelegate 添加 3D Touch 快速操作的主要内容,如果未能解决你的问题,请参考以下文章