在TabBarController中使用相同的ViewController和TableView

时间:2017-05-22 16:08:34

标签: ios swift uitableview uitabbarcontroller

我有以下问题。我在星期一到星期五的每一天使用TabBarController,每天有5个不同的标签。

每个标签只需要TableView,根据当前所选标签(即日期)显示一些信息。

我正在使用相同ViewController的每个标签。我正在使用以下方法

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)

检测当前标签栏索引并加载要在表格中显示的数据。在我的想法中,此方法还更新变量currentDay,该变量用于检索要显示的正确数据。

在我用来获取此类数据的代码下面。

let retrieveOrariofromCoreData = CoreDataController.sharedIstanceCData.load(currentDay)
self.arrayTimes = retrieveOrariofromCoreData
if (self.arrayTimes?.isEmpty)! {
    Utils.setPlaceholderForEmptyTable(self, message: "...")
} else {
    self.tableView.reloadData()
    self.tableView.isHidden = false
}

问题是我将此代码放在viewDidLoadviewWillAppear方法中,该方法在更改变量tabBarController的{​​{1}}之前执行。

也许我的做法有点基础。我想找到一种更简单,更优雅的方式来做到这一点。

1 个答案:

答案 0 :(得分:1)

我不知道您何时更改currentDay变量。我刚用UITabBarControllerDelegate s tabBar:didSelect:测试了它,它在加载viewController之前执行。

我的测试代码如下所示:

var index = 0
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    index = (self.tabBar.items?.index(of: item)) ?? 0
}

然后在viewDidLoadviewDidAppear中的viewController中:

print("loaded \((self.tabBarController as? TabViewController)?.index ?? 0)")

总是给我正确的索引。