28

我有一个UIView需要显示两个 UITableViews,但它们永远不会一起显示,通过使用SegementedBar你可以切换一个或另一个。

处理这个问题的最佳方法是什么?只需创建一个Table View Controller并更改数据源,或者创建 2 个Table View Controllers并在另一个可见时隐藏一个。

这 2 个表格将具有完全不同的布局和不同的自定义单元格。

4

5 回答 5

48

我会保留一个数据源和委托。

这意味着所有委托/数据源方法都变得更加复杂,但这意味着您可以保留 viewController 和 view 之间的一对一关系。

保留对每个表视图的引用

//vc.h
@property (nonatomic, weak) IBOutlet UITableView* firstTableView;
@property (nonatomic, weak) IBOutlet UITableView* secondTableView;

在 datasource/delegate 方法中,您需要考虑这样一个事实,即该方法需要根据正在使用的 table view 表现出不同的行为。例如

//vc.m
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ...

    if (tableView == self.firstTableView) {

        ...

    } else { // tableView == self.secondTableView

        ...
    }
}

return cell;

}

于 2012-05-18T08:59:10.540 回答
6
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ...

    if (tableView.tag == 1) {

        ...

    } else { // tableView == self.secondTableView

        ...
    }
}

可以从 .xib 分配标签。所以不需要在 .h 文件中有 UITableVeiw 变量。.xib 中需要两个表视图

于 2012-05-18T09:29:12.117 回答
4

两种方法都有一些优点和缺点,但我个人更喜欢具有两个独立控制器的方法。

方法 1 - 创建一个 Table View Controller 并更改数据源

  • 这种方法有助于避免额外和重复的代码。
  • 使用这种内存管理就像只使用一个控制器一样好。(虽然这不是一个大问题,直到那时我们不会有很多数据。)
  • 问题在于复杂性。

方法 2 - 2 表视图控制器

  • 使用这种方法肯定会有额外和重复的代码。
  • 但这样的复杂性较低。
于 2012-05-18T08:51:18.297 回答
4

在我当前的应用程序中,我需要UITableView在一个单独的应用程序中有 4 个,我必须UIViewController一次显示单个表格,根据用户选择的选项卡,我添加了四个表格,因为它们都有不同的自定义单元格和功能,为了降低复杂性,我花了四个。

这样做的主要好处是,每次您不需要调用reloadData来更新单个表。我只需要正确处理表格的显示和隐藏流程。相信我,这看起来很酷。一点都不闪。

就我而言,我仅通过代码创建四个表。我创建了一个方法,该方法将根据我通过的标签返回一个表格。

cellForRowAtIndexPath通过将代码分成不同的功能来保持尽可能小。

于 2014-12-18T05:40:26.377 回答
0

使用单独UITableViewControllers并交换视图。它的代码更少,复杂性更低,这是 Apple 使用TabBar的方式。

至于代码复杂度,真的没有。UISegmentedControl当' 的值发生变化时,您只需执行以下操作即可切换视图:

UIView *previousSuperview = myViewController1.view.superview;
myViewController2.view.frame = myViewController1.view.frame;
[myViewController1.view removeFromSuperview];
[previousSuperview addSubview:myViewController2.view];

或者,您可以设置相应视图的hidden属性。

于 2012-05-18T09:18:51.787 回答