如何处理两个TableView

我在一个应用程序中有两个UITableView实例,问题是我不知道如何定义每个表需要显示的内容。 这是代码:

。H :

{ NSArray *array1; NSArray *array2; IBOutlet UITableView *table1; IBOutlet UITableView *table2; } 

.m:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [array1 count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } cell.textLabel.text = [array1 objectAtIndex:indexPath.row]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; } 

此代码仅适用于一个表。 我不知道如何使用array2设置其他表。 人们,你有什么想法吗?

您需要做的就是检查您在delegate/datasource方法中设置的UITableView 。 尝试:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; { if(tableView == table1){ return 1; // The number of sections in table1; } else if(tableView == table2){ return 1; // The number of sections in table2; } } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; { if(tableView == table1){ return [array1 count]; } else if(tableView == table2){ return [array2 count]; } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if(cell == nil){ cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } if(tableView == table1){ cell.textLabel.text = [array1 objectAtIndex:indexPath.row];; } else if(tableView == table2){ cell.textLabel.text = [array2 objectAtIndex:indexPath.row];; } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath; { UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath]; } 

希望有帮助!

在UITableViewDataSource方法上,您必须将您的ivars与委托进行比较。

喜欢这个:

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if([tableView isEqual:table1]) { return [array1 count]; } else if([tableView isEqual:table2]) { return [array2 count]; } else { return 0; } } 

对回调中的每个方法执行此操作。

但我建议只有一个tableView并根据一些标志加载不同的内容。 你必须调用[tableView reloadData]才能[tableView reloadData]运行并设置一个标志。 然后你会改变上面这样的代码if([flag isEqualToString:@"table1"]) { //code for table1 }

除非您在同一个视图上有两个表。 那么第一种方法就是你应该做的。

执行此操作的常规方法是为每个表视图创建单独的数据源/委托对象。 它们不必是单独的类。 它们可以是同一类的两个实例。