【问题标题】:Show detail view controller after spotlight search聚光灯搜索后显示详细视图控制器
【发布时间】:2019-07-26 02:52:07
【问题描述】:

在最近的一个项目中,我实现了聚光灯搜索并且一切正常(我使用了 UINavigationController)。现在我正在回收聚光灯搜索另一个不包含 UINavigationController 但只有两个 UIViewController 的项目。同样在这种情况下,除了在聚光灯搜索中按下特定项目时重定向到详细视图控制器之外,一切正常。我发现问题出在这个方法上,因为我没有使用 UINavigationController。所以我的问题是,如何更改此代码以仅使用我的两个 UIViewController?

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

    let navController = self.window!.rootViewController as! UINavigationController

    if let actID = userActivity.userInfo!["kCSSearchableItemActivityIdentifier"] as? String {
        let ricette = DataManager.shared.arra.filter { $0.id.uuidString == actID }
        if let ricetta = ricette.first {
            debugPrint("Abbiamo la ricetta grazie all'ID")

            if let listController = navController.topViewController as? ListController {

                if let posizione = DataManager.shared.arra.index(of: ricetta) {
                    listController.showDetailFromSpotlightSearch(posizione)
                }

            } else if let ricettaController = navController.visibleViewController as? RicettaController {
                ricettaController.ricetta = ricetta
                ricettaController.aggiornaInterfaccia()
            }

        } else { debugPrint("errore ID") }
    } else { debugPrint("errore ID") }

    return true
}

【问题讨论】:

    标签: ios swift corespotlight


    【解决方案1】:

    你应该使用这两个扩展来确定topViewController和visibleViewController:

    extension UIApplication {
    class func getVisibleViewController(_ rootViewController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let presentedViewController = rootViewController?.presentedViewController {
            return getVisibleViewController(presentedViewController)
        }
    
        return rootViewController
    }}
    
    extension UIApplication {
    class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let presented = controller?.presentedViewController {
            return topViewController(controller: presented)
        }
        return controller
    }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多