ios - 转至聊天 View Controller

标签 ios swift firebase firebase-realtime-database segue

我附上了图片,希望能让大家更容易理解。我的 FirstViewController 有一个 Collection View ,其中包含来 self 的 firebase 数据库的用户列表。当我单击用户时,我将转到 DetailedViewController,其中包含有关被单击用户的更多信息。在该 viewController 中,目标是单击“撰写”按钮并转到一个 viewController,该 viewController 允许我与我单击其个人资料的用户聊天。 enter image description here

从 DetailedViewController 到 Message 用户 1,我已经走到这一步了。

@IBAction func SendMessage(_ sender: Any) {
    performSegue(withIdentifier: "chat", sender: self)

}

我不确定如何确保我发送的是我点击消息的特定用户。

这就是我将数据从 FirstViewController 传递到 DetailedViewController 的方式。

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "details" {

            if let indexPaths = self.CollectionView!.indexPathsForSelectedItems{

                let vc = segue.destination as! BookDetailsViewController
                let cell = sender as! UICollectionViewCell
                let indexPath = self.CollectionView!.indexPath(for: cell)
                let post = self.posts[(indexPath?.row)!] as! [String: AnyObject]
                let Booked = post["title"] as? String
                vc.Booked = Booked


                print(indexPath?.row)

            }  }

最佳答案

一种方法是在您的 DetailViewController 类中,或者您实现 performSegue(withIdentifier:, sender:) 的任何类中,添加以下内容:

override public func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard segue.identifier == "chat", let dest = segue.destination as? ChatViewController else {
        return
    }

    dest.user = self.user

}

我不知道您是如何声明 user 的,但是如果 user 是一个对象,请执行我上面的操作。如果您说 user 是一种涵盖您要传递的多个属性的方式,请执行以下操作:

dest.name = self.name
dest.number = self.number  
//etc

prepare(for segue:, sender:) 允许您从它的类中拦截任何 segue 并在 performSegue(...) 执行。要将您的代码定位到特定的 segue/destination/situation,请确保您的代码在执行之前对这些约束进行检查;否则代码将在类中实现的所有 segue 上执行。在我的示例中,我使用了您的 segueidentifier 作为检查。

关于ios - 转至聊天 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43992937/

相关文章:

sockets - 云功能被杀死。错误: quota exceeded (Socket connections : per 100 seconds).大火计划

objective-c - 将值传递给属性的正确方法是什么?

ios - 找不到协议(protocol)声明 NSFetchedResultsController

ios - 如何让 NSAttributedString 的下划线样式属性起作用?

c# - 您如何声明类型为 'enum' 的参数(即它可以采用任何枚举)?

ios - 使用 PinchGesture 控制最大和最小缩放

ios - 如何构建一个动态的 UIPageViewController

ios - 关于 iOS 10 后台运行 Timer 的问题

Firebase Firestore JavaScript : Find document with a field unset

javascript - 在不加载完整歌曲的情况下制作音频 Sprite