Passing data between two ViewControllers (delegate) - Swift
14,911
1) You need to set delegate into prepareForSegue:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let viewController = segue.destinationViewController as? SecondVC {
viewController.delegate = self
}
}
UPDATE:
2) Set delegate
as Optional
class SecondVC: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
var delegate: SendDataDelegate?
...
func pickerView (pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
var text = arr[row]
dispatch_async(dispatch_get_main_quene(), {
self.delegate?.sendData(text)
)}
}
Author by
Сашок Гончаренко
Updated on June 15, 2022Comments
-
Сашок Гончаренко almost 2 years
I have two
ViewController's.
FirstVC
- I havelabel
andbutton
with segue "modal"SecondVC
- I havePickerView
andbutton
(back to FirstVC):@IBAction func bntback(sender: AnyObject) { self.dissmissViewControllerAnimatied(true, completion: nil) }
And I created delegate in
SecondViewController
as:protocol SendDataDelegate { func sendData(text:String) }
Next:
class SecondVC: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { var delegate: SendDataDelegate! var firstvc = FirstVC() var arr = ["First", "Second", "Third"] @IBOutlet var pickview: UIPickerView! override func viewDidLoad() { super.viewDidLoad() pickview.dataSource = self pickview.selegate = self }
My function of
PickerView
and in this function I use my delegate as:func pickerView (pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { var text = arr[row] dispatch_async(dispatch_get_main_quene(), { self.delegate.sendData(text)//there is an error: "fatal error: unexpectedly found nil while unwrapping an Optional value" )} }
FirstVC:
class FirstVC: UIViewController, SendDataDelegate { var data = SecondVC() //.... override func viewDidLoad() { super.viewDidLoad() self.data.delegate = self } func sendData (text:String) { mylable.text = text //or //var txt = text //mylable.text = txt } }
Help me please with this problem.