gpt4 book ai didi

swift - 如何在 3 个 View Controller 之间传递信息?

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

我想设置一个信息在 viewController 之间传递的设置,如下所示:1->2->3->2。目前我有一个设置来传递来自 VC 的信息1->2。传递的信息是从表中选择单元格的 indexPath。需要传递信息,因为第二个 viewController 中的代码 viewDidLoad() 取决于所选的单元格。它设置如下(并且工作正常):VC 1:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard segue.identifier == "cellSelected" else {return}
let indexPath = self.tableView.indexPathForSelectedRow
let rowSelectedd = indexPath
let destViewController: MainPageCellSelectedViewController = segue.destination as! MainPageCellSelectedViewController
destViewController.rowSelected = rowSelectedd!
}
var rowSelectedd = IndexPath()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "cellSelected", sender: rowSelectedd)
}

VC 2(使用传递的信息):var rowSelected = IndexPath()//这有从 MainPageVC 准备的信息

override func viewDidLoad() {
super.viewDidLoad()

if rowSelected.section == 0{
//do something
} else{
// do something else
}
}

在第二个 viewController 中有一个按钮可以连接到第三个 viewController(这也可以正常工作)。但是,在那个第三个​​ viewController 中有一个后退按钮,可以返回到第二个viewController。问题是,第二个 viewController 的 viewDidLoad() 代码取决于从第一个 VC 传递的变量。由于它没有被传递(因为转场现在是从 3->2 而不是 1->2),应用程序崩溃了。我不确定适当传输此信息的最佳方式是什么。应该怎么做?

最佳答案

除非您使用 Unwind segue,否则您不会真正使用 segues 向后导航。从您的描述来看,委派似乎就是您想要的。

尝试这样的事情:

protocol ThirdVCDelegate {
func somethingHappens()
}

class SecondVC: UIViewController {
override func prepare(for segue:UIStoryboardSegue,
sender: Any?)
{
if segue.identifier == "whatever the segue is between second and third VC" {
let thirdVC = segue.destination as! ThirdVC
thirdVC.delegate = self
}
}
}

extension SecondVC: ThirdVCDelegate {
func somethingHappens() {
// Do whatever you want in SecondVC in response to some action in ThirdVC
}
}

class ThirdVC: UIViewController {
var delegate:ThirdVCDelegate!

func someMethodWhereYouWantToMakeACallbacktoSecondVC {
delegate.somethingHappens()
// You can pop or dismiss your thirdVC if you're done with it here.
}
}

如果要将特定值从 thirdVC 传递到 secondVC,还可以向协议(protocol)方法添加参数。

关于swift - 如何在 3 个 View Controller 之间传递信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42178541/

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