我有以下问题。我在星期一到星期五的每一天使用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
}
问题是我将此代码放在viewDidLoad
或viewWillAppear
方法中,该方法在更改变量tabBarController
的{{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
}
然后在viewDidLoad
和viewDidAppear
中的viewController中:
print("loaded \((self.tabBarController as? TabViewController)?.index ?? 0)")
总是给我正确的索引。