我有一个UIView
需要显示两个 UITableViews,但它们永远不会一起显示,通过使用SegementedBar
你可以切换一个或另一个。
处理这个问题的最佳方法是什么?只需创建一个Table View Controller
并更改数据源,或者创建 2 个Table View Controllers
并在另一个可见时隐藏一个。
这 2 个表格将具有完全不同的布局和不同的自定义单元格。
我有一个UIView
需要显示两个 UITableViews,但它们永远不会一起显示,通过使用SegementedBar
你可以切换一个或另一个。
处理这个问题的最佳方法是什么?只需创建一个Table View Controller
并更改数据源,或者创建 2 个Table View Controllers
并在另一个可见时隐藏一个。
这 2 个表格将具有完全不同的布局和不同的自定义单元格。
我会保留一个数据源和委托。
这意味着所有委托/数据源方法都变得更加复杂,但这意味着您可以保留 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;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
if (tableView.tag == 1) {
...
} else { // tableView == self.secondTableView
...
}
}
可以从 .xib 分配标签。所以不需要在 .h 文件中有 UITableVeiw 变量。.xib 中需要两个表视图
两种方法都有一些优点和缺点,但我个人更喜欢具有两个独立控制器的方法。
方法 1 - 创建一个 Table View Controller 并更改数据源
方法 2 - 2 表视图控制器
在我当前的应用程序中,我需要UITableView
在一个单独的应用程序中有 4 个,我必须UIViewController
一次显示单个表格,根据用户选择的选项卡,我添加了四个表格,因为它们都有不同的自定义单元格和功能,为了降低复杂性,我花了四个。
这样做的主要好处是,每次您不需要调用reloadData
来更新单个表。我只需要正确处理表格的显示和隐藏流程。相信我,这看起来很酷。一点都不闪。
就我而言,我仅通过代码创建四个表。我创建了一个方法,该方法将根据我通过的标签返回一个表格。
我cellForRowAtIndexPath
通过将代码分成不同的功能来保持尽可能小。
使用单独UITableViewControllers
并交换视图。它的代码更少,复杂性更低,这是 Apple 使用TabBar的方式。
至于代码复杂度,真的没有。UISegmentedControl
当' 的值发生变化时,您只需执行以下操作即可切换视图:
UIView *previousSuperview = myViewController1.view.superview;
myViewController2.view.frame = myViewController1.view.frame;
[myViewController1.view removeFromSuperview];
[previousSuperview addSubview:myViewController2.view];
或者,您可以设置相应视图的hidden
属性。