两个UITableView在同一视图中
我想知道是否允许在同一个视图中使用多个UItableView
(我没有看到苹果的人机接口指南中的任何东西),如果没关系,如何在每个UITableView
viewDidLoad
加载不同的DataSource
?
你可以肯定有多个表格视图。 你需要确保每个指针都有一个指针,然后在你的数据源方法中,你可以这样做:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { if(tableView == tableViewOne) return 5; else //if (tableView == tableViewTwo) return 3; }
这对于所有委托/数据源方法都是一样的,这就是为什么他们给了你哪个表视图作为参数。
是的你可以。 问题是每个UITableView
将使用相同的UITableViewDataSource
和UITableViewDelegate
。 因此,您必须确定在每个必要的委托方法中使用哪个表视图。
例如:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // make bigger rows if (tableView == myBigRowTableView) { // make bigger rows return 127; } else if (tableView == mySmallRowTableView) { // make smaller rows return 20; } else { return 30; } }
IMO最干净的解决scheme将是每个tableview有一个控制器。
如果你使用一个控制器进行n个tableview,你将不得不在很多地方使用if-statemenst
-
– numberOfSectionsInTableView:
-
– tableView:numberOfRowsInSection:
-
– tableView:titleForHeaderInSection:
- …
基本上所有你需要实现的UITableViewDatasource-Protocol方法。
所以,如果你需要改变一些东西,你必须在很多地方改变它。
如果您为一个tableview使用一个控制器类,则根本不需要检查。
- 为每个tableview编写一个控制器类,使其符合
UITableViewDatasource
协议- 实施您将需要的协议方法。 至less
-
– numberOfSectionsInTableView:
-
– tableView:numberOfRowsInSection:
-
– tableView:cellForRowAtIndexPath:
-
- 实施您将需要的协议方法。 至less
- 调用
-setDataSource:
用于每个tableview到右侧控制器类的对象
我写了一个示例代码: https : //github.com/vikingosegundo/my-programming-examples/tree/master/TwoTableViews
TwoTableViewsViewController.m
- (void)viewDidLoad { [super viewDidLoad]; if (firstController == nil) { firstController = [[FirstTVContoller alloc] init]; } if (secondController == nil) { secondController = [[SecondTVController alloc] init]; } [firstTable setDataSource:firstController]; [secondTable setDataSource:secondController]; [firstTable setDelegate:firstController]; [secondTable setDelegate:secondController]; firstController.view = firstController.tableView; secondController.view = secondController.tableView; }
您可以为每个表设置标签。 然后在tableview委托方法中应用这个条件,例如:
myTable.tag=12;
为了使生活更轻松,您可以将两个不同的委托传递给UITableView。 如果你通过同一个代表,你将不得不做很多if语句。 通过创build两个不同的委托,它将使您的代码变得更加清洁。
您可以在单个视图中拥有多个表格视图。 添加标签到每个表格视图和使用tableview.tag你可以加载数据到tableviews分开。
例:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if (tableView.tag == x) { //code to load table view with tag value x } else{ //code to load second table } return cell; }