【问题标题】:How to continue spotlight search and show content ViewController如何继续聚焦搜索并显示内容 ViewController
【发布时间】:2018-02-18 18:13:58
【问题描述】:

我已经解决了 Spotlight 搜索,我现在面临的问题是如何根据已在 Spotlight 中按下的项目显示内容视图。

我的应用结构是UITabVC>UINavigationVC>UICollectionVC>UIVC


亮点和代码如下所示

// Continue Spotlight Search
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    if userActivity.activityType == CSSearchableItemActionType {
        let uniqueIdentifier = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as! String
        let id = uniqueIdentifier.components(separatedBy: "_")
        let rootTabVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "RootTabVC") as! RootTabVC

        print(id[0], id[1], separator: " - ", terminator: "\n")
        // printed "craft - Shovel"

        switch id[0] {
        case "craft" :
            let craftVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CraftDetailVC") as! CraftItemDetailVC
            let craftRootCollectionVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CraftRootCollectionVC") as! CraftCollectionVC
            let craftItemsCollectionVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CraftItemsCollectionVC") as! CraftItemsCollectionVC
            // MARK: - TODO show vc

        case "character" : break
        case "mob" : break
        case "plant" : break
        case "recipe" : break
        case "thing" : break
        case "material" : break
        default: break
        }
    }

    return true
}

【问题讨论】:

    标签: ios swift uiapplication corespotlight


    【解决方案1】:

    在你的ApplicationDelegate 类中实现这个功能:

    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {

    然后就可以通过以下方式访问被点击的CSSearchableItemuniqueIdentifier

    if let searchActivityIdentifier = userActivity.userInfo [CSSearchableItemActivityIdentifier] as? String { }

    那么你需要做的就是根据searchActivityIdentifiervalue.(push, present etc.)将用户重定向到相关的视图控制器

    【讨论】:

      【解决方案2】:

      即使我在我的一个应用程序中也遇到了同样的问题。然后我在网上冲浪寻求解决方案,here 最好的示例示例和代码以及它的解释。

        func application(_ application: UIApplication,
          continue userActivity: NSUserActivity,
          restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
      
            guard userActivity.activityType == Employee.domainIdentifier,
              let objectId = userActivity.userInfo?["id"] as? String else {
                return false
            }
      
            if let nav = window?.rootViewController as? UINavigationController,
              let listVC = nav.viewControllers.first as? EmployeeListViewController,
              let employee = EmployeeService().employeeWithObjectId(objectId) {
                nav.popToRootViewController(animated: false)
      
                let employeeViewController = listVC
                  .storyboard?
                  .instantiateViewController(withIdentifier: "EmployeeView") as!
                EmployeeViewController
      
                employeeViewController.employee = employee
                nav.pushViewController(employeeViewController, animated: false)
                return true
            }
      
            return false
        }
      

      【讨论】:

        猜你喜欢
        • 2016-05-04
        • 1970-01-01
        • 2017-11-22
        • 1970-01-01
        • 2020-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多