juelizabeth
juelizabeth

Reputation: 505

Segue to chat viewcontroller

I have included images to hopefully make this easier to understand. My FirstViewController has a collection view with a list of users from my firebase database.When I click on the users I am segued to a DetailedViewController that has more information about the user that was clicked. Within that viewController, the goal is to click on the compose button and segue to a viewController that allows me to chat with the user, whose profile I clicked on. enter image description here

I have gotten as far as this for segueing from DetailedViewController to Message user 1.

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

}

I am not sure how to make sure I am sending the particular user I click on a message.

This is how I am passing data from FirstViewController to 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)

            }  }

Upvotes: 0

Views: 82

Answers (1)

mmr118
mmr118

Reputation: 505

One route to take is in your DetailViewController class, or whatever class you have implementing performSegue(withIdentifier:, sender:), add this:

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

}

I don't know how you have the user declared but if user is an object, do what I have above. If you're saying user as a way to umbrella multiple properties you want to pass.. do this:

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

prepare(for segue:, sender:) allows you to intercept any segue from it's class and set up whatever variables needed before the performSegue(...) executes. To target your code to a specific segue/destination/situation, make sure your code runs a check on those constraints before executing; otherwise the code will execute on all segues implemented in the class. In my example, I used your segue's identifier as that check.

Upvotes: 1

Related Questions