如何使用由Swift编写的Xcode中的TabBarControllerpipe理的ViewControllers处理iOS应用程序的静态QuickAction

我已经在Info.plist中创build了一些(静态的)QuickActions,用于在Xcode中创build并用Swift编写的iOS应用程序。

我有问题,使他们能够打开一个ViewController。 原因,我已经GOOGLE了,但没有为我工作。 如果这是重要的:我使用由TabBarControllerpipe理的ViewController。 大多数教程似乎使用NavigationController。 但是,我认为这将与赛段完成,对吧? 我需要什么代码来处理它?

有人可以提供吗? 还是有人知道一个简单的手册/教程?

问候,大卫。

PS:我试过这个代码,但它似乎只适用于NavigationController? 码:

func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) { self.handleShortcutItem(shortcutItem) completionHandler(true) } func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) { switch shortcutItem.type { case "icons.quickaction.home": self.presentComposeViewController() default: break } } func presentComposeViewController() { guard let navigationController = window?.rootViewController as? UINavigationController else { return } let identifier = "MyViewController" let composeViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier(identifier) navigationController.pushViewController(composeViewController, animated: false) } 

我终于在@ ILikeTau的帮助下find了解决scheme。

我正在使用下面的代码来打开我的ViewControllers与一个TabBarController与QuickActionpipe理:

 @available(iOS 9.0, *) func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) { if(shortcutItem.type == "app.quickaction.search"){ let sb = UIStoryboard(name: "Main", bundle: nil) let vc = sb.instantiateInitialViewController() window?.rootViewController = vc guard let tabBarController = window?.rootViewController as? UITabBarController else { return }; tabBarController.selectedIndex = 2 } else if(shortcutItem.type == "app.quickaction.home"){ let sb = UIStoryboard(name: "Main", bundle: nil) let vc = sb.instantiateInitialViewController() window?.rootViewController = vc guard let tabBarController = window?.rootViewController as? UITabBarController else { return }; tabBarController.selectedIndex = 0 } } 

此代码适用于两种模式:应用程序处于后台模式,应用程序已closures。 我认为这种方式比多function的普通方式更简单,更短。