繁体   English   中英

Swift 中未调用协议委托方法

[英]Protocol Delegate Method is not called in Swift

不调用协议委托方法..

第一个视图控制器代码

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

}

第二个视图控制器代码

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

如何调用 func didSelectData 请帮帮我

因为您已经使用 segue 在视图之间导航。 您也可以在此示例中使用它。 我提供以下代码示例,以便您可以自行跟踪以检测代码中的问题。

在此处输入图片说明

第一个视图控制器

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

第二个视图控制器

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

所以基本上在行var seconviewcontroller : SecondViewController = SecondViewController()与您推送的视图控制器实例不同。

您正在制作SecondViewController一个单独实例,因此您在推送这样的 pushes 对象时已经完成了委托 self

let secondVCInstance = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
secondVCInstance.delegate = self
self.navigationController?.pushViewController(secondVCInstance, animated: true)

注意: - 每个对象都有自己的属性

第一个视图控制器

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

第二个视图控制器

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM