2 UITableViews在一个UIView

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

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

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

我会保留一个数据源和代表。

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

保留对每个表格视图的引用

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

在数据源/委托方法中,您需要考虑这样一个事实,即该方法需要根据正在使用的表视图而有所不同。 例如

 //vc.m -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ... if (tableView == self.firstTableView) { ... } else { // tableView == self.secondTableView ... } } return cell; 

}

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ... if (tableView.tag == 1) { ... } else { // tableView == self.secondTableView ... } } 

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

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

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

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

方法2 – 2表格视图控制器

  • 采用这种方法肯定会有额外的重复代码。
  • 但是这样做不那么复杂。

在我目前的应用程序中,我需要在一个UIViewController有4个UITableView ,一次我要显示单个表,基于用户select的标签,我已经添加了四个表,因为所有有不同的自定义单元格和function,以减less复杂性,我花了四个。

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

就我而言,我只是通过代码创build四个表。 我做了一个方法,将返回一个基于我通过的标签的表。

通过将代码分成不同的function,我保持cellForRowAtIndexPath尽可能小。

使用单独的UITableViewControllers并交换视图。 这是更less的代码,更less的复杂性,这是苹果使用TabBar的方式

至于代码复杂性,真的没有。 您只需执行以下操作即可在UISegmentedControl的值已更改时切换视图:

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

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