【发布时间】:2016-10-15 21:14:36
【问题描述】:
在 Swift 3 中从 UIViewController 向 UITabBarController 传递数据的最佳方式是什么?
我正在构建一个单视图应用程序,我有一个需要分成 4 个部分的详细信息视图。我想使用 TabBar 来实现这一点,并从 UIViewController 的列表中传递一个 ID,然后将该值传递给 TabBar 中的每个单独的 UIViewController。这样我就可以调用一个 Web 方法,该方法采用 ID 来填写各个视图中的数据。
该应用程序正在从带有 Storyboard 的 Obj-C 转换为没有 Storyboard 的 Swift 3,因此我无法访问我拥有的通常的 segue 定义。我还曾经在 Obj-C 版本中使用 UserDefaults 来保存选定的 ID,然后在各个视图中再次将其拉出。但是,我不相信这是实现我所追求的最佳方式。
到目前为止,我已经尝试通过访问初始 UIViewController 中的 UITabBarController 类并在 ViewController 中设置一个变量,然后将其传递给第一个选项卡中的 ViewController。如果我从 UIViewController 推送到 UIViewController(TabBar 中的第一个视图,但独立运行)但当目标控制器是 TabBarController 时不起作用。
我还尝试在 ViewControler 中发布通知并在 TabBarController 中观察结果。然而,观察代码永远不会被调用。我正在使用:
所选行:
NotificationCenter.default.post(name: notificationName, object: selectedRowID)
然后在 TabBarController 上的 ViewDidLoad 中(也尝试了 viewDidAppear 和 viewWillAppear):
NotificationCenter.default.addObserver(self, selector: #selector(setID), name: notificationName, object: nil)
上述方法有效,但是,只有当我选择第二个选项卡然后返回到第一个选项卡然后它被调用两次时!?!?!
我也尝试过 Singleton 类,但完全没有用。
使用 UserDefaults 真的是最好的方法吗?
【问题讨论】:
标签: uiviewcontroller uitabbarcontroller swift3 nsnotificationcenter