如何投射uinavigationview控制器的第一个视图

时间:2017-04-27 17:45:14

标签: ios swift xcode firebase firebase-authentication

我一直在关注firebase教程来创建自己的聊天应用程序,我试图从包含表视图的uiviewcontroller访问chatviewcontroller。 Viewcontroller嵌入在导航控制器中。如何在选择单元格时调出chatviewcontroller?

这是我的代码:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)

    //retrieve the destination view controller
    let navVc = segue.destination as! UINavigationController

    let channelVc = navVc.viewControllers.chatViewController as! ViewController

    // set the senderDisplayName in Viewcontroller to the email provided in the email field by the user

    channelVc.senderDisplayName = userEmailTextField?.text
}

Here is the error msg

2 个答案:

答案 0 :(得分:1)

假设您的ChatViewController是导航控制器的根视图控制器,您应该将代码更改为:

let channelVc = navVc.viewControllers.first as! ChatViewController

navVC.viewControllers是由UIViewController管理的UINavigationController数组,因此除非您实现了自定义内容,否则该数组将没有名为chatViewController的属性。

编辑:要把它们放在一起,并且为了演示如何安全地解开这些选项,你的prepareForSegue应该是这样的:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)
    if let navVc = segue.destination as? UINavigationController, let channelVc = navVc.viewControllers.first as? ChatViewController {
        //Now you have a reference to your ChatVC, and you can set the DisplayName
        channelVc.senderDisplayName = userEmailTextField?.text
    }
}

答案 1 :(得分:0)

您必须从UINavigationController获取第一个视图控制器:

let channelVc = navVc.viewControllers.first as! ChatViewController