gpt4 book ai didi

ios - 将委托(delegate)分配给第三类中另一个类的一个类

转载 作者:行者123 更新时间:2023-11-29 05:18:53 24 4
gpt4 key购买 nike

我过去曾使用委托(delegate)模式来传递数据,但这是一种一对一的交互,就像我需要从ViewController B传回数据一样> 到 ViewController A,然后我从 A 内部设置 B 中定义的委托(delegate)属性。通常我们需要这种委托(delegate)。

但是我有一定的条件,我需要从第三个内部设置委托(delegate)属性,不是 ViewController,而是一个类

其布局如下 -

protocol DataPassingDelegate {
func reloadData()
}

class ButtonView: UIButton {

// Some function that decide which ViewController is to be displayed
func destinationVCDecider() {

// parentController fetched the ViewController in which the button is laid out
let destinationVCObject = self.parentController.storyboard?.instantiateViewController(withIdentifier: Constants.STORYBOARD_IDENTIFIER.JOB_DETAILS_VIEW_CONTROLLER) as! JobDetailsViewController

// Setup for passing data via delegate
let jobsVCObject = JobsViewController()

destinationVCObject.delegate = jobsVCObject

// Displaying the Details of the job
parentController.navigationController?.pushViewController(destinationVCObject, animated: true)

}

}

class JobsViewController: UIViewController,DataPassingDelegate {

func reloadData() {
// Reload the jobs from the server
}

}

class JobDetailsViewController: UIViewController {

weak var delegate: DataPassingDelegate?

func navigateBack() {

delegate?.reloadData()

}

}
当触发特定事件时,将调用 JobDetailsViewController 内的

navigateBack()

现在,当调用 navigateBack() 时,delegate 属性结果为 nil

之前,我曾经在存在一对一交互的情况下分配self,但这里它们之间有一些我不希望的类将它们传遍各处

最佳答案

您的做法是正确的。你需要调试它。像这样创建 JobsViewController 的实例 -

让 vc = UIStoryboard(name: "Name", bundle: nil).instantiateViewController(identifier: "ViewID") 作为 JobsViewController。

您可以通过在JobDetailsViewController的ViewDidLoad方法中放置断点来调试委托(delegate)实例是否被传递。

您可以遵循的另一种方法是使用通知中心

关于ios - 将委托(delegate)分配给第三类中另一个类的一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58872098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com