ios - 如何转换 uinavigationviewcontroller 的第一个 View

标签 ios swift xcode firebase firebase-authentication

我一直在按照 firebase 教程创建自己的聊天应用程序,我正在尝试从包含 TableView 的 uiviewcontroller 访问 chatviewcontroller。 Viewcontroller 嵌入在导航 Controller 中。选择单元格时如何调出聊天 View Controller ?

这是我的代码:

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

最佳答案

假设您的 ChatViewController 是导航 Controller 的 Root View Controller ,您应该将代码更改为:

let channelVc = navVc.viewControllers.first as! ChatViewController

navVC.viewControllers 是由 UINavigationController 管理的 UIViewController 的数组,因此该数组不会有名为 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
    }
}

关于ios - 如何转换 uinavigationviewcontroller 的第一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43664639/

相关文章:

ios - 获取 UICollectionViewCell 标签文本

ios - 在游戏过程中修改 SKActions

ios - UIViewController 指定初始化器 vs loadView 方法

swift - 没有为 SKShapeNode 指定初始化(circleOfRadius : radius)

ios - 自 Xcode 10 起,UIImageView setImage 在后台线程上崩溃

ios - 使用 UITapGestureRecognizer 传递参数

iOS 用户界面测试 : Get image filename (Swift)

Swift: searchBar 仍然可见 navigationItem.hidesSearchBarWhenScrolling = true

xcode - 在 iOS 中添加构建依赖项

objective-c - #Swift 中的定义和变量