Swift version: 5.10
If you have a value in one view controller and want to pass it to another, there are two approaches: for passing data forward you should communicate using properties, and for passing data backwards you can either use a delegate or a block.
Passing data forward is used when you want to show some information in a detail view controller. For example, view controller A might contain a list of names that the user can select, and view controller B might show some detailed information on a single name that the user selected. In this case, you would create a property on B like this:
class ViewControllerB: UIViewController {
var selectedName: String = "Anonymous"
}
How you set that property depends on how are you showing the detail view controller. For example, if you're using a UINavigationController
and want to push the new view controller onto the stack, you would write this:
let viewControllerB = ViewControllerB()
viewControllerB.selectedName = "Taylor Swift"
navigationController?.pushViewController(viewControllerB, animated: true)
If you're using segues, you'll want to use code like this instead:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = self.tableView.indexPathForSelectedRow {
let controller = segue.destination as! ViewControllerB
controller.selectedName = objects[indexPath.row]
}
}
}
To pass data back, the most common approach is to create a delegate property in your detail view controller, like this:
class ViewControllerB: UIViewController {
var selectedName: String = "Anonymous"
weak var delegate: ViewControllerA!
}
When creating your detail view controller, make sure you set up its delegate
property, like this:
let viewControllerB = ViewControllerB()
viewControllerB.selectedName = "Taylor Swift"
viewControllerB.delegate = self
navigationController?.pushViewController(viewControllerB, animated: true)
With this set up complete, you can now create a method in your master view controller that should be called by the detail view controller. For example, you might have something like this:
func updatedSelectedName(newName: String) {
// do something with newName
}
SPONSORED Get accurate app localizations in minutes using AI. Choose your languages & receive translations for 40+ markets!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 2.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.