一个UIView中的2个UITableViews

时间:2012-05-18 08:43:00

标签: ios uitableview

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

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

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

5 个答案:

答案 0 :(得分:48)

我会保留一个数据源&委派。

这意味着所有委托/数据源方法变得更加复杂但是这意味着您可以保持viewController和amp;之间的一对一关系。图。

保留对每个表视图的引用

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

在datasource / delegate方法中,您需要考虑到该方法需要根据正在使用的表视图而表现不同的事实。 e.g。

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

    ...

    if (tableView == self.firstTableView) {

        ...

    } else { // tableView == self.secondTableView

        ...
    }
}

return cell;

}

答案 1 :(得分:6)

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ...

    if (tableView.tag == 1) {

        ...

    } else { // tableView == self.secondTableView

        ...
    }
}
可以从.xib分配

标记。 所以不需要在.h文件中有UITableVeiw变量。 需要.xib中的两个表视图

答案 2 :(得分:4)

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

方法1 - 创建一个表视图控制器并更改数据源

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

方法2 - 2表视图控制器

  • 使用这种方法肯定会有额外的重复代码。
  • 但这种复杂性较低。

答案 3 :(得分:4)

在我当前的应用中,我需要在一个UITableView中有4个UIViewController,我会根据用户选择的标签立即显示单个表格,我&# 39; ve添加了四个表,因为所有具有不同的自定义单元格和功能,以减少复杂性,我花了四个。

这样做的主要好处是,每次您不需要致电reloadData来更新单个表格。我只需要妥善处理桌子的表演和放大隐藏流动。相信我看起来很酷。根本没有轻弹。

就我而言,我只是按代码创建四个表。我制作了一个方法,根据我传递的标签返回一个表格。

通过将代码划分为不同的函数,我保持cellForRowAtIndexPath尽可能小。

答案 4 :(得分:0)

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

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

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

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