【问题标题】:Notification action open view without Navigation Controller没有导航控制器的通知操作打开视图
【发布时间】:2016-10-17 23:39:42
【问题描述】:

我正在做一个从推送通知中打开详细视图的应用程序。 在我的 AppDelegate 中,我正在打开视图,但该视图没有导航控制器。

然后我认为我的解决方案是使用方法instantiateViewControllerWithIdentifier 处理导航控制器,我不确定这是否是解决方案,但这是标题的问题......

我的班级SlideNavigationController是Objective-C,当我使用方法时

let rootVC = UIStoryboard(name: "Main", bundle: nil).
instantiateViewControllerWithIdentifier("SlideNavigationController") as! SlideNavigationController

我得到错误:

警告:无法加载任何 Objective-C 类信息。这将显着降低可用类型信息的质量。

有什么想法吗?对不起我的英语,欢迎编辑!谢谢

我的 UIController 的问题解决了。这是我的代码:

           let rootViewController = self.window!.rootViewController as! UINavigationController
            let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let targerView = mainStoryboard.instantiateViewControllerWithIdentifier("view_place_detail") as! VCPlaceDetailTour
            targerView.placeId = aps as String
            rootViewController.pushViewController(targerView, animated: false)

【问题讨论】:

  • 什么是“目标视图控制器”?
  • 一个带有 Objetive C 代码的视图控制器

标签: ios objective-c swift uiviewcontroller uinavigationcontroller


【解决方案1】:

您可以使用此代码。

let rootViewController = self.window!.rootViewController as! UINavigationController
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let targerView = mainStoryboard.instantiateViewControllerWithIdentifier("view Identifier") as! PromotionDetailsVC
rootViewController.pushViewController(targerView, animated: false)

希望对你有帮助。

【讨论】:

  • 什么是 EasyExtension?
  • EasyExtension 是我的自定义类,带有泛型 用于获取 Json 的值,例如通过传递 JSON 和 Key 可以通过此函数轻松获取任何选项值。
  • 如果您需要该代码,我可以与您分享。
  • 完美!我能够使用 rootController 打开我的登陆视图,但如果应用程序在其他视图中打开,我的登陆视图没有打开。另一个解决方案在没有导航栏的情况下打开了登录页面....因此,使用您的解决方案,我总是使用导航栏打开登录视图。谢谢@AnandNimje
【解决方案2】:

您必须创建一个桥接头才能在 swift 项目中使用目标 c 控制器。

点击以下链接了解有关创建桥接头的信息。

How to find path of Bridging-Header.h - Swift, Xcode

之后必须在桥接头文件中导入控制器的.h文件。

现在您可以轻松地在 swift 项目中使用您的目标 c 视图控制器。

【讨论】:

  • 我导入了“SlideNavigationController.h”,但错误仍然存​​在。
【解决方案3】:

您可以通过编程方式创建导航控制器并将所需的视图控制器设置为导航控制器的 rootViewController,然后将导航控制器设置为 windows rootViewController。

例如:

let rootVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SlideNavigationController") as! SlideNavigationController
let window = UIApplication.sharedApplication().keyWindow
window.rootViewController = rootVC

此链接中也有同样的说明:set initial viewcontroller in appdelegate - swift

【讨论】:

  • 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“不支持推送导航控制器”:(
  • rootVC 是一个我相信的导航控制器,那么你必须直接将它设置为你的 root vie 控制器
  • 也在你的故事板中设置你的导航控制器的根视图控制器
猜你喜欢
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多