I am trying to transfer data from the textfield of one View Controller to the label from another.
How can I call the View Controller instance from the code of the other View Controller? I'm working with storyboards thus I never created an instance of the View Controllers in the code? Are the instances automatically created? And what name do they have?
Thanks for your help!
Create a new IBOutlet called shakeButton for your storyboard button in your ViewController. swift file. Select the shake button in Interface Builder. Then hold down the control button ( ⌃ ) and click-drag from the storyboard button into your ViewController.
So, Ctrl+Drag from the “Go to Other View Controller” button, to somewhere in the second View Controller. It can be anywhere in the main box of the second view controller. When you release, it will show you a box like the one below. This lets you set what kind of segue you want to use.
Add a new Cocoa Touch class file in your project, name it FirstViewController
and set the following code in it:
import UIKit class FirstViewController: UIViewController { @IBOutlet weak var textField: UITextField! // FIXME: link this to the UITextField in the Storyboard!!! override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { let controller = segue.destinationViewController as! SecondViewController controller.text = textField.text } }
Add a new Cocoa Touch class file in your project, name it SecondViewController
and set the following code in it:
import UIKit class SecondViewController: UIViewController { var text: String? @IBOutlet weak var label: UILabel! // FIXME: link this to the UILabel in the Storyboard!!! override func viewDidLoad() { super.viewDidLoad() label.text = text } }
In the Storyboard, embed the first view controller in a UINavigationController
. Link the first view controller to the second with a UIButton
or a UIBarButtonItem
. Set the name of the first view controller to FirstViewController
and the name of the second view controller to SecondViewController
. Create a UITextField
in the first view controller. Create a UILabel
in the second view controller. Link the textfield and the label to their respective declarations in FirstViewController
and SecondViewController
.
Here, this is a perfect protocol/delegate case. You may find a lot of stuff on StackOverflow dealing with this. However, here is a rough example.
Add a new Cocoa Touch class file in your project, name it FirstViewController
and set the following code in it:
import UIKit class FirstViewController: UIViewController, DetailsDelegate { @IBOutlet weak var label: UILabel! // FIXME: link this to the UILabel in the Storyboard func updateLabel(withString string: String?) { label.text = string } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { let controller = segue.destinationViewController as! SecondViewController controller.delegate = self } }
Add a new Cocoa/Cocoa Touch class file in your project, name it SecondViewController
and set the following code in it:
import UIKit protocol DetailsDelegate: class { func updateLabel(withString string: String?) } class SecondViewController: UIViewController { weak var delegate: DetailsDelegate? @IBOutlet weak var textField: UITextField! // FIXME: link this to the UITextField in the Storyboard override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) delegate?.updateLabel(withString: textField.text) } }
In the Storyboard, embed the first view controller in a UINavigationController
. Link the first view controller to the second with a UIButton
or a UIBarButtonItem
. Set the name of the first view controller to FirstViewController
and the name of the second view controller to SecondViewController
. Create a UILabel
in the first view controller. Create a UITextField
in the second view controller. Link the textfield and the label to their respective declarations in FirstViewController
and SecondViewController
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With