我的应用包含两个 View 。第一个是 GMSMapView
,第二个用于连接到发送坐标的蓝牙设备。
连接蓝牙设备后,我使用委托(delegate)将信息发送回 map View 并四处移动标记。为了在我之前使用 segues 的 View 之间转换,这并没有停止蓝牙 View Controller ,并且数据按照我希望的方式传输到 map View 。
我遇到了重新启动 map View 的问题,所以我决定使用导航 Controller 。现在我使用 push segue 进入我的第二个 View ,然后使用 pop 返回到第一个 View 的相同实例。太好了,成功了!我现在遇到的问题是弹出第二个 View 似乎完全阻止它像以前那样在后台运行。有没有办法让它像以前一样在后台运行?
我目前用来弹出第二个 View 的是
self.navigationController?.popViewControllerAnimated(true)
任何想法将不胜感激!谢谢!
最佳答案
弹出 View Controller 不会“停止运行”。它被退还给你,如果你不保留它,它就会被彻底销毁。
如果您不希望这种情况发生,请在归还时保留它。您目前正在忽略返回的 View Controller :
self.navigationController?.popViewControllerAnimated(true)
相反,保留对它的引用:
self.mySecondViewController =
self.navigationController?.popViewControllerAnimated(true)
但是请注意,这是一个非常不寻常的架构。您将无法使用 Storyboard segue 再次推送,因为它会推送不同的副本。最好完全放弃您的导航 Controller 架构,因为它完全不适合弹出后 View Controller 持久存在的想法。如果您想要一个两个 View Controller 同时存在的架构,您最好使用 UITabBarController — 或者,更好的是,完全 重组您的应用程序。您需要 View Controller 在弹出后保持不变的想法是一种“难闻的气味”:这意味着您将功能放在了错误的位置。将功能放在一个确实持久存在的地方,而不是强制 View Controller 以某种人为的方式持久存在。
关于ios - Swift IOS 在弹出后保持 View Controller 在后台运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43260955/