如何使用由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的普通方式更简单,更短。