可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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) } }