在UITabBarController中“重用”UITableViewController

时间:2012-12-26 20:28:20

标签: iphone ios ipad uitabbarcontroller uitableview

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

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

我尝试放入UITableViewController:

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

但是索引并不总是相同的(它取决于你选择标签的顺序?,有时我得到的索引是非常高的数字)。

你会怎么做?

2 个答案:

答案 0 :(得分:1)

假设您的意思是“是否可以将3个标签链接到相同的UITableViewController 实例”:

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

除了上述观点之外,每次重新加载表格也是浪费精力,因为用户更改了标签页。善待并按照你的意图做事。您没有理由不能拥有一个处理所有内容的视图控制器类,但是您为每个选项卡创建了一个不同的实例。

注意:您的UIViewController知道它所在的选项卡会被视为“代码味道”。这通常意味着您正在以不合需要的方式做某事并损害此代码的可重用性。这适用于这种情况。

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

答案 1 :(得分:0)

利用UITabBarControllerDelegate检测用户切换标签的时间。

选项卡切换:

  • 将新数组内容分配给用于显示的成员变量 表格视图中的数据(使用与发布时类似的if / else块)和
  • 在您的UITableView上调用reloadData 使用数据触发重绘