0

所以我开始开发一个应用程序,它有 5 个选项卡,其中 3 个显示带有自定义单元格的 UITableViewController,但具有不同的数据。

是否可以将 3 个选项卡链接到同一个 UITableViewController,但检查选择了哪个选项卡,并据此加载正确的数据?

我尝试放入 UITableViewController:

if (self.tabBarController.selectedIndex == 0)
//Load array1
else if (self.tabBarController.selectedIndex == 1)
//Load array2
else
//Load array3

但是索引并不总是相同的(这取决于您选择选项卡的顺序?有时我会得到非常高的索引)。

你会怎么做?

4

2 回答 2

1

假设您的意思是“是否可以将 3 个选项卡链接到同一个 UITableViewController实例”:

这是可能的,但这不是一个好主意。我相信(但不能指出你的章节和经文)Apple 的假设是不同的选项卡将具有独特的、不同的视图控制器实例。当您更改选项卡时,即将隐藏的视图控制器实例会调用各种“即将隐藏”的生命周期方法。同样,即将出现的视图控制器实例具有各种“即将显示”的生命周期方法。您的单视图控制器实例可能会违反这些生命周期方法的显示顺序。

撇开上述观点不谈,仅仅因为用户更改了选项卡,每次重新加载表格也是一种浪费。保持友善,按照你应该做的方式做事。没有理由你不能拥有一个处理所有事情的视图控制器类,但是你为每个选项卡创建一个不同的实例。

注意:您的 UIViewController 知道它在哪个选项卡中算作“代码气味”。这通常意味着您正在以一种不受欢迎的方式做某事并损害此代码的可重用性。这适用于这种情况。

为了避免这种“代码异味”,您的视图控制器应该能够获得要显示的数据,甚至不知道是否显示在 UITabBarController 中。

于 2012-12-26T22:45:13.687 回答
0

利用UITabBarControllerDelegate来检测用户何时切换选项卡。

在标签切换时:

  • 将新数组内容分配给用于在表视图中显示数据的成员变量(与您发布的类似 if/else 块),以及
  • 调用reloadData您的 UITableView 以触发数据重绘
于 2012-12-26T20:40:29.693 回答