Protocol Delegate Method is not called in Swift

匿名 (未验证) 提交于 2019-12-03 01:27:01

问题:

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

回答1:

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



回答2:

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)     } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!