繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM