两个UITableView在同一视图中

我想知道是否允许在同一个视图中使用多个UItableView (我没有看到苹果的人机接口指南中的任何东西),如果没关系,如何在每个UITableView viewDidLoad加载不同的DataSource

你可以肯定有多个表格视图。 你需要确保每个指针都有一个指针,然后在你的数据源方法中,你可以这样做:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { if(tableView == tableViewOne) return 5; else //if (tableView == tableViewTwo) return 3; } 

这对于所有委托/数据源方法都是一样的,这就是为什么他们给了你哪个表视图作为参数。

是的你可以。 问题是每个UITableView将使用相同的UITableViewDataSourceUITableViewDelegate 。 因此,您必须确定在每个必要的委托方法中使用哪个表视图。

例如:

 - (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使用一个控制器类,则根本不需要检查。

  1. 为每个tableview编写一个控制器类,使其符合UITableViewDatasource协议
    • 实施您将需要的协议方法。 至less
      • – numberOfSectionsInTableView:
      • – tableView:numberOfRowsInSection:
      • – tableView:cellForRowAtIndexPath:
  2. 调用-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; }