我已经包含了图片,希望这更容易理解。我的FirstViewController有一个集合视图,其中包含来自我的firebase数据库的用户列表。当我点击用户时,我会被一个有更多关于被点击用户的信息的详细控制控制器。在该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)
} }
答案 0 :(得分:1)
要采取的一条路线是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
/目的地/情境,请确保您的代码在执行之前检查这些约束;否则代码将在类中实现的所有segue
上执行。在我的示例中,我使用了segue
的{{1}}作为检查。