我附上了图片,希望能让大家更容易理解。我的 FirstViewController 有一个 Collection View ,其中包含来 self 的 firebase 数据库的用户列表。当我单击用户时,我将转到 DetailedViewController,其中包含有关被单击用户的更多信息。在该 viewController 中,目标是单击“撰写”按钮并转到一个 viewController,该 viewController 允许我与我单击其个人资料的用户聊天。
从 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
上执行。在我的示例中,我使用了您的 segue
的 identifier
作为检查。
关于ios - 转至聊天 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43992937/