如何处理两个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 }
除非您在同一个视图上有两个表。 那么第一种方法就是你应该做的。
执行此操作的常规方法是为每个表视图创建单独的数据源/委托对象。 它们不必是单独的类。 它们可以是同一类的两个实例。