gpt4 book ai didi

ios - 将数据传回第一个 viewController

转载 作者:行者123 更新时间:2023-11-28 14:31:14 25 4
gpt4 key购买 nike

我对如何处理快速协议(protocol)以在两个 View Controller 之间传递数据有基本的了解。我的情况是这样的:我想将数据传回我的第一个 View Controller 。

例如:

第一个 View Controller

class ViewControllerA: UIViewController, ViewControllerCResult {

func set(data: String) {

}

}

第二个 View Controller

class ViewControllerB: UIViewController {

}

第三个 View Controller

protocol ViewControllerCResult {
set(data: String)
}

class ViewControllerC: UIViewController {
var delegate: ViewControllerCResult?
}

ViewControllerA -> ViewControllerB -> ViewControllerC

我想将数据从 ViewControllerC 传递到 ViewControllerA。谁能帮我解决这个问题?

最佳答案

您可以从 Controller A -> B -> C 传递 Delegates,当调用 popViewcontroller 时,您可以检查 ViewController C 中的 self.delegate,如果它存在只是像这样调用函数 self.delegate?.set("data from c")。检查

popControllerPressed Function in ViewController3

第一个 View Controller

类 ViewController: UIViewController, ViewControllerCResult {

var delegate: ViewControllerCResult?

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@IBAction func pushControllerPressed(_ sender: Any) {
if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController2") as? ViewController2 {
if let navigator = navigationController {
viewController.delegate = self
navigator.pushViewController(viewController, animated: true)
}
}
}

func set(data: String) {

}

}

第二个 View Controller

class ViewController2: UIViewController, ViewControllerCResult {

var delegate: ViewControllerCResult?

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@IBAction func pushControllerPressed(_ sender: Any) {
if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController3") as? ViewController3 {
if let navigator = navigationController {
viewController.delegate = self.delegate
navigator.pushViewController(viewController, animated: true)
}
}
}

func set(data: String) {
print(data)
}

}

第三 View Controller

protocol ViewControllerCResult {
func set(data: String)
}

类 ViewController3:UIViewController,ViewControllerCResult {

var delegate: ViewControllerCResult?

func set(data: String) {
print(data)
}

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@IBAction func popControllerPressed(_ sender: Any) {
for controller in self.navigationController!.viewControllers as Array {
if controller.isKind(of: ViewController.self) {
delegate?.set(data: "data from C")
self.navigationController!.popToViewController(controller, animated: true)
break
}
}

}

}

这是代码链接:Pass data forth and back

关于ios - 将数据传回第一个 viewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51237712/

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