我已经包括图像,希望使这更容易理解。我的FirstViewController有一个集合视图,其中包含来自我的firebase数据库的用户列表。当我单击这些用户时,我会转到一个DetailedViewController,该控制器包含有关单击的用户的更多信息。在viewController中,目标是单击compose按钮,然后转到viewController,它允许我与用户聊天,我单击了该用户的配置文件。ios - Segue聊天ViewController-LMLPHP
我已经从DetailedViewController转到消息用户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

}

我不知道你是如何声明用户的,但是如果用户是一个对象,请按照我上面所说的做。如果你说用户是保护你想通过的多个属性的一种方式。。执行以下操作:
dest.name = self.name
dest.number = self.number
//etc

prepare(for segue:, sender:)允许您截取类中的任何segue,并在执行performSegue(..)之前设置所需的任何变量。要将代码定向到特定的segue/destination/situation,请确保代码在执行之前对这些约束运行检查;否则代码将在类中实现的所有segue上执行。在我的例子中,我使用了您的segue作为检查。

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

10-10 20:42
查看更多