Swift IOS 在弹出后保持视图控制器在后台运行



我的应用程序由两个视图组成。第一个是GMSMapView,第二个用于连接到发送坐标的蓝牙设备。

连接蓝牙设备后,我使用委托将信息发送回地图视图并移动标记。为了在我以前使用的视图之间转换,这并没有阻止蓝牙视图控制器,数据就像我希望的那样进入地图视图。

我遇到了重新启动地图视图的问题,所以我决定使用导航控制器。现在,我使用推送 segue 进入我的第二个视图,然后弹出以返回到第一个视图的相同实例。太好了,这奏效了!我现在遇到的问题是,弹出第二个视图似乎会阻止它像以前那样在后台运行。有没有办法让它像以前一样在后台运行?

我目前用来弹出第二个视图的是

self.navigationController?.popViewControllerAnimated(true)

任何想法将不胜感激!谢谢!

弹出的视图控制器不会"停止运行"。它被归还给你,如果你不保留它,它就会被完全摧毁

如果您不希望发生这种情况,请在返回时保留它。您当前忽略返回的视图控制器:

self.navigationController?.popViewControllerAnimated(true)

相反,请保留对它的引用:

self.mySecondViewController = 
self.navigationController?.popViewControllerAnimated(true)

但是,请注意,这是一个非常不寻常的体系结构。您将无法使用情节提要 segue 再次推送,因为它将推送不同的副本。最好完全放弃您的导航控制器架构,因为它完全不适合视图控制器在弹出后仍然存在的想法。如果你想要一个同时存在两个视图控制器的架构,你最好使用 UITabBarController - 或者,更好的是,完全重新组织你的应用程序。需要视图控制器在弹出后仍然存在的想法是一种"难闻的气味":这意味着您将功能放在了错误的位置。将功能放在保留的位置,而不是强制视图控制器以某种人为方式保留

最新更新