Swift 2:从单独的标签栏控制器更新 TableView

Posted

技术标签:

【中文标题】Swift 2:从单独的标签栏控制器更新 TableView【英文标题】:Swift 2: Update TableView from Separate Tab Bar Controller 【发布时间】:2016-07-11 05:27:46 【问题描述】:

我正在使用 XCode 7.3 处理 Swift 2.0。

我目前有 2-Navigation-View-Controllers(NAV1 & NAV2) 。每个都有自己独立的表视图控制器(TAB1 和 TAB2)以及相应的表(TABLE1 和 TABLE2)。

TABLE1 有一个基于数据的单独子表 (TABLE1A...TABLE1Z)。

第二个表 (TABLE2) 可以通过共享的单例类更改由 table1 及其子表 (TABLE1 & TABLE1A...TABLE1Z) 共享的数据。 2-Navigation-View-Controllers(NAV1 & NAV2) 是 Tab-Bar-Controller (TAB_MAIN) 的每个 Modals。 singelton 类可以通过任何 Controller 访问,并且是一种数据共享方式。

TAB_MAIN

-NAV1

--TABLE1 (SINGLETON)

----TABLE1A (SINGELTON)

----... [potential for multiple sub-modals/tables](SINGLETON)

----TABLE1Z (SINGLETON)

-NAV2

--TABLE2 (SINGLETON)

我想要的是以下内容:

    对 TABLE2 中的单例数据进行了更改,以立即更新 TABLE1 中的数据及其所有子模态。 注意:目前这是通过函数调用更新单例类中的数据来工作的;即 objectClass.changeData()

    更新数据后,通过选择 TABLE2 中的特定行,我想: (a) 将当前选中的选项卡更改为第一个选项卡视图控制器 资产净值1。请注意,这目前通过以下方式工作: tabBarController?.selectedIndex = 1 (b) 为第一个选项卡 (NAV1) 附加到父导航控制器的所有表格更新表格中显示的数据。 (c) 展开到第一个选项卡 (NAV1) 的第一个 tableView。

目前发生的情况是,NAV2->TABLE2 中的更改会更新数据并将当前选定的选项卡更改为 tableView NAV1 留下的任何内容,而不更改数据。

只有转到所有子表(即 TABLE1A...TABLE1Z、TABLE1AA 等)的父表 (NAV1->TABLE1) 才能重置数据,然后选择 tableViews 并向下钻取子表中显示的数据得到正确更新。

我想从第二个 NAV2 控制器中“放松”到第一个 NAV1 控制器的最顶部 tableView,或者,如果失败,则在从 NAV2->TABLE2 切换到任何当前钻孔时自动更新信息-向下 NAV1->TABLEX。

【问题讨论】:

改进格式 【参考方案1】:

尝试在您的NAV2-Table2 中使用NSNotifcationCenter 中的观察者。在 viewDidLoad 中添加观察者

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(Table2ViewController.updateTable(_:)), name:"NotificationUpdateTable2", object: nil)

然后在另一个视图控制器中执行更新后使用postNotificationName 调用更新。这将反映 table2 的变化

NSNotificationCenter.defaultCenter().postNotificationName("NotificationUpdateTable2", object: objectData)

记得让 cmets 更容易跟踪变化,因为观察者可以在任何地方触发

【讨论】:

它应该可以工作。你可以在这里参考详细信息andrewcbancroft.com/2014/10/08/…

以上是关于Swift 2:从单独的标签栏控制器更新 TableView的主要内容,如果未能解决你的问题,请参考以下文章

从标签栏控制器跳回导航控制器 - swift 4

从标签栏控制器打开带有后退按钮的单独 ViewController

swift xcode从导航控制器切换到标签栏控制器的正确方法

如何在 swift 中从情节提要中的 didSelectRowAt indexPath 打开视图标签栏控制器?

如何在swift 3中从标签栏移动时重新加载页面?

将主标签栏添加到其他视图控制器