聚光灯搜索后显示视图控制器

Posted

技术标签:

【中文标题】聚光灯搜索后显示视图控制器【英文标题】:Show view controller after spotlight search 【发布时间】:2016-05-09 03:46:02 【问题描述】:

我会尽量让自己清楚,但英语不是我的母语,所以对于给您带来的不便,我深表歉意。

我一直在关注这个http://www.appcoda.com/core-spotlight-framework/ 以在聚光灯搜索中展示我的一些应用功能,但我被困在展示每个功能的视图控制器的部分。主要是(我认为)因为我的应用程序是一个选项卡式的。这是我的故事板的屏幕截图:

所以当尝试使用这个方法时:

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool 
    let viewController = (window?.rootViewController as! UINavigationController).viewControllers[0] as! consultaCorralones
    viewController.restoreUserActivityState(userActivity)

    return true

(consultaCorralones 是我希望展示的视图控制器)

当我运行它时,我得到了错误:

无法将“UITabBarController”(0x11041d5d8) 类型的值转换为“UINavigationController”(0x11041d588)。

我有限的 Swift 知识告诉我将 UINavigationController 更改为 UITabBarController,但这样做我得到:

无法将“UINavigationController”(0x1117b8588) 类型的值转换为“Parcial2.consultaCorralones”(0x10fb83200)。

我也尝试关注Perform Segue from App Delegate swift,但没有成功。

我们将不胜感激。

【问题讨论】:

试试let viewController = (window?.rootViewController as! UITabBarController).selectedViewController as! consultaCorralones 谢谢,但它一直显示相同的错误Could not cast value of type 'UINavigationController' (0x1022f6588) to 'Parcial2.consultaCorralones' (0x1006c1200). 我正在尝试猜测您的视图层次结构;试试let viewController = ((window?.rootViewController as! UITabBarController).selectedViewController as! UINavigationController).topViewController as! consultaCorralones 【参考方案1】:

UIApplication.sharedApplication().keyWindow?.rootViewController 返回一个UITabBarController。您需要从中获取selectedViewController。那将是一个UINavigationController 实例。

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool 
    let controller = UIApplication.sharedApplication().keyWindow?.rootViewController as! UITabBarController
    let navController = controller.selectedViewController as? UINavigationController
    let viewController = navController?.viewControllers[0] as! consultaCorralones
    viewController.restoreUserActivityState(userActivity)
    return true

希望对您有所帮助。

【讨论】:

以上是关于聚光灯搜索后显示视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

使用表格视图快速搜索控制器滚动

添加子视图后显示上一个视图控制器的页面视图控制器

模态视图导航栏未正确显示

搜索栏未显示在视图控制器中

视图控制器中的搜索栏和搜索显示控制器,其中包含 UITableView

从搜索控制器导航后缺少导航栏