【发布时间】:2018-04-07 04:18:27
【问题描述】:
有 2 个应用程序 A 和 B。
App A 有一个打开 App B 的 url。
App B 打开后,它必须将 5 个视图控制器加载到导航堆栈上,这由以下代码完成:
let LandingVC = self.storyboard?.instantiateViewControllerWithIdentifier("LandingVC") as! LandingVC
let Dashboard = self.storyboard?.instantiateViewControllerWithIdentifier("Dashboard") as! Dashboard
let PlayerVC = self.storyboard?.instantiateViewControllerWithIdentifier("PlayerVC") as! PlayerVC
let PlayerDetailVC = self.storyboard?.instantiateViewControllerWithIdentifier("PlayerDetailVC") as! PlayerDetailVC
let ScoreReportVC = self.storyboard?.instantiateViewControllerWithIdentifier("ScoreReportVC") as! ScoreReportVC
let viewControllersList = [LandingVC, Dashboard, PlayerVC, PlayerDetailVC, ScoreReportVC]
self.navigationController?.setViewControllers(viewControllersList, animated: false)
从ScoreReportVC 开始,我需要能够在之前的ViewControllers 上设置变量,以便用户可以导航到之前的屏幕,即使他们从另一个应用程序触发了该应用程序。
这是我尝试过的:在堆栈上和ScoreReportVC 内部的ScoreReportVC 后面的先前视图控制器中定义了一个协议,如下所示:
for viewcontroller in self.navigationController?.viewControllers {
if viewcontroller is PlayerDetailVC {
PlayerDetailVC.delegate = self
}
if viewcontroller is PlayerVC {
PlayerVC = self
}
if viewcontroller is Dashboard {
Dashboard.delegate = self
}
if viewcontroller is LandingVC {
LandingVC.delegate = self
}
}
但是代表没有被召唤。任何帮助如何正确地将数据传递给堆栈上的所有ViewControllers 将不胜感激。
【问题讨论】:
-
从 ScoreReportVC 弹出时会发生什么?
-
我无法判断这个问题,因为调试器在后台线程停止并且不会显示上一个屏幕。
-
也许您的 UIViewControllers 实例比您预期的更快从内存中删除,这可能是未调用委托方法的原因。
-
另外,您是否尝试过将委托设置在循环之外?只是好奇。
-
尝试将其设置在循环之外,结果相同。尝试回溯并能够看到导航堆栈上仍然存在的所有视图控制器。
标签: ios swift uinavigationcontroller delegates protocols