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
属性。