我在一个应用程序中有两个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设置其他表。你有什么想法吗?
答案 0 :(得分:4)
您需要做的就是检查UITableView
方法中设置的delegate/datasource
。尝试:
- (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];
}
希望有帮助!
答案 1 :(得分:2)
在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]
才能使其运行并设置标志。然后,您将更改上面的代码,如if([flag isEqualToString:@"table1"]) { //code for table1 }
除非您在同一个视图中有两个表。那么第一种方法就是你应该做的。
答案 2 :(得分:0)
执行此操作的常规方法是为每个表视图创建单独的数据源/委托对象。它们不必是单独的类。它们可以是同一类的两个实例。