ios - 在 TabBarController 中使用相同的 ViewController 和 TableView

标签 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 之前执行 当前日期

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

最佳答案

我不知道你什么时候改变你的 currentDay 变量。我刚刚用 UITabBarControllerDelegates 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)")

它总是给我正确的索引。

关于ios - 在 TabBarController 中使用相同的 ViewController 和 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44117492/

相关文章:

swift - Swift 上的 FB 分享功能

ios - iOS 8.2 模拟器运行时在 Xcode 7 上不可用

ios - 你的 plist 应该包含 <string></string> 吗?

objective-c - 在 applicationWillResignActive 中发送内存警告

javascript - 将字典值中的整数分配给字符串的字符

xcode - 将 imageview 旋转一个随机度数

iphone - iOS:在 MKMapView 上绘制文本

ios - 如何删除我不在 Swift 中使用的空单元格

uitableview - 双击UITableViewCell

ios - UITableView 在进入编辑模式时取消选择单元格