我有UIView
需要显示两个UITableViews,但它们永远不会一起显示,使用SegementedBar
可以切换其中一个。
处理此问题的最佳方法是什么?只需创建一个Table View Controller
并更改数据源,或创建2 Table View Controllers
,只需在另一个可见时隐藏一个。
2个表将具有完全不同的布局,具有不同的自定义单元格。
答案 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
属性。