ios - Swift IOS 在弹出后保持 View Controller 在后台运行

标签 ios swift uiview viewcontroller navigationcontroller

我的应用包含两个 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/

相关文章:

android - Chromecast CAF - 自动重新连接管理

ios - 表格 View 单元格接受文本输入?

ios - Swift:自定义 UIView.transition 有问题吗?

ios - 如何在滚动时隐藏 UIView?

swift - 快速将枚举转换为 NSNumber

iOS - 动画 - 图像从圆圈出来

iphone - 使用 Custom Segue 以编程方式导航到另一个 ViewController

ios - UITableViewCell图像旋转后未调整大小

ios - 使用 AVMutableComposition 进行精确计时

ios - 如何在 Swift 中搜索包含结构元素的数组?