Reputation: 397
Protocol delegate method is not called..
First View controller code
class ViewController: UIViewController,customDelegate {
var seconviewcontroller : SecondViewController = SecondViewController()
@IBOutlet weak var Label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
seconviewcontroller.delegate = self
}
func didSelectData(_ result: String) {
Label.text = result
print("Didselect Data Call")
}
Second view controller code
import UIKit
protocol customDelegate: class {
func didSelectData(_ result: String)
}
class SecondViewController: UIViewController {
var delegate: customDelegate?
@IBOutlet weak var secondbutton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func secondbuttonclick(_ sender: Any) {
let selectedItem = "naga"
delegate?.didSelectData(selectedItem)
}
how to call the func didSelectData pls help me
Upvotes: 1
Views: 6362
Reputation: 1
First View Controller
import UIKit
class ViewController: UIViewController, SecondVCDelegate {
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let secondVC = segue.destination as? SecondViewController {
secondVC.delegate = self
}
}
func didSelectData(_ result: String) {
label.text = result
print(result)
}
}
Second View Controller
import UIKit
protocol SecondVCDelegate: class {
func didSelectData(_ result: String)
}
class SecondViewController: UIViewController {
@IBOutlet weak var button: UIButton!
weak var delegate: SecondVCDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func buttonTapped(_ sender: UIButton) {
delegate?.didSelectData("My result")
dismiss(animated: true, completion: nil)
}
}
Upvotes: 0
Reputation: 3499
As you've already used segue for navigating between views. You can also use that for this example. I give the following as a code sample so that you can track back yourself to detect issue in your code.
First View Controller
import UIKit
class ViewController: UIViewController, SecondVCDelegate {
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let secondVC = segue.destination as? SecondViewController {
secondVC.delegate = self
}
}
func didSelectData(_ result: String) {
label.text = result
print(result)
}
}
Second View Controller
import UIKit
protocol SecondVCDelegate: class {
func didSelectData(_ result: String)
}
class SecondViewController: UIViewController {
@IBOutlet weak var button: UIButton!
weak var delegate: SecondVCDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func buttonTapped(_ sender: UIButton) {
delegate?.didSelectData("My result")
dismiss(animated: true, completion: nil)
}
}
Upvotes: 4
Reputation: 3657
So basically in line var seconviewcontroller : SecondViewController = SecondViewController()
is different from your pushing view controller instance.
You are making a separate instance of SecondViewController
so you have done delegate self at the time of pushing with pushes object like that
let secondVCInstance = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
secondVCInstance.delegate = self
self.navigationController?.pushViewController(secondVCInstance, animated: true)
NOTE: - EVERY OBJECT HAS ITS OWN PROPERTIES
Upvotes: 2