Protocol Delegate Method is not called in Swift

后端 未结 3 1254
故里飘歌
故里飘歌 2020-12-21 21:45

Protocol delegate method is not called..

First View controller code

class ViewController: UIViewController,customDelegate {

  var          


        
相关标签:
3条回答
  • 2020-12-21 21:58

    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

    0 讨论(0)
  • 2020-12-21 22:03

    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)
        }
    }
    
    0 讨论(0)
  • 2020-12-21 22:08

    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)
        }
    }
    
    0 讨论(0)
提交回复
热议问题