[英]How to pass data between two ViewControllers with TabBarController in Swift
[英]How to handle static QuickActions for iOS app using ViewControllers managed by a TabBarController in Xcode written in Swift
我已经在Info.plist中为用Xcode创建并用Swift编写的iOS应用程序创建了一些(静态)QuickAction。
我在使他们能够打开ViewController时遇到问题。 当然,我已经在google上搜寻了,但对我没有任何帮助。 如果这很重要:我正在使用由TabBarController管理的ViewController。 大多数教程似乎都使用NavigationController。 但是,我认为将由segue完成,对吗? 我需要处理什么代码?
有人可以提供吗? 还是有人知道简单的手册/教程?
问候,大卫。
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的帮助下找到了解决方案。
我正在使用以下代码通过QuickAction打开由TabBarController管理的ViewController:
@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
}
}
此代码在两种模式下均有效:app处于后台模式,app已关闭。 我认为这种方法比具有多种功能的通用方法更容易,更短。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.