0

我在一个视图控制器中使用两个表视图,两个表都有单独的数据。

当我实现 tableview 委托方法时,代码仅适用于 tag1,不适用于 tag2。

我已经使用了 StackOverflow 上几乎所有可能的解决方案,但仍然面临这个问题。这是我的代码tableView:cellForRowAtIndexPath:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    if(tableView.tag==1){
        
        static NSString *myIdentiFier=@"myIdentiFier";
        productCell *cell=(productCell *)[tableView dequeueReusableCellWithIdentifier:myIdentiFier];
        if(!cell){
            NSArray *cellObjs=[[NSBundle mainBundle]loadNibNamed:@"productCell" owner:self options:nil];
            for(id obj in cellObjs){
                if([obj isKindOfClass:[productCell class]]){
                    cell=(productCell *)obj;
                    break;
                }
            }
            cell.productTitle.text=[nameArray objectAtIndex:indexPath.row];
            [cell.productImage setImageWithURL:[NSURL URLWithString:[productImageArray objectAtIndex:indexPath.row]] placeholderImage:[UIImage imageNamed:@"rsz_no-image"]];
        }
        
        return cell;
    }
    else{
        static NSString *mileIdentifier=@"mileIdentifier";
        mileStoneTableViewCell *mcell=(mileStoneTableViewCell *)[tableView dequeueReusableCellWithIdentifier:mileIdentifier];
        if(!mcell){
            NSArray *cellObjs=[[NSBundle mainBundle]loadNibNamed:@"mileStoneTableViewCell" owner:self options:nil];
            for(id obj in cellObjs){
                if([obj isKindOfClass:[mileStoneTableViewCell class]]){
                    mcell=(mileStoneTableViewCell *)obj;
                    break;
                }
            }
            mcell.mile_description.text=[mileStoneDescr objectAtIndex:indexPath.row];
            
        }
        
        return mcell;
    }
}
4

2 回答 2

0

保留对每个表视图的引用

//viewcontroller.h

@property (nonatomic, weak) IBOutlet UITableView* firstTableView;
@property (nonatomic, weak) IBOutlet UITableView* secondTableView;

在 datasource/delegate 方法中,您需要考虑这样一个事实,即该方法需要根据正在使用的 table view 表现出不同的行为。例如

//viewcontroller.m

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ...

    if (tableView == self.firstTableView) {

        ...

    } else { // tableView == self.secondTableView

        ...
    }
}

return cell;
}
于 2013-10-04T05:02:45.500 回答
0

请注意以下几点:
1. 你打电话了吗[self.secondTableView reloadData]
2. 尝试NSLog(@"%d", self.secondTableView.tag)确保标签设置正确。
3. 您是使用界面生成器设置标签还是以编程方式设置?如果您以编程方式设置它,请确保在调用之前设置了标签reloadData
4. 最后确保您的dataSourcedelegate设置正确。
5. 如果你有两个tableView,建议不要在Interface Builder中通过控制拖拽来设置两个tableView的dataSourceDelegate。在某些情况下,这可能会导致应用程序崩溃。以编程方式设置 tableViewdatasource中的一个或两个。delegate

如果所有这些都是正确的,那么您的代码应该可以工作。

于 2013-10-04T05:43:42.013 回答