0

我正在使用几个 UITableViews 垂直放置在彼此旁边的项目上。我必须显示这些表格,但是当我尝试为每个表格显示不同的表格内容时卡住了。这是代码:

-(void)setTheTable{
    int numberOfTables = 5;

    //height of the table
    CGFloat height = self.view.bounds.size.height;
    CGRect tableBounds = CGRectMake(0.0f, 0.0f, self.widthOfTheScreen, height- 30);

    self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, 30.0f, self.widthOfTheScreen, height - 30.0f)];

    self.scrollView.contentSize = CGSizeMake(self.widthOfTheScreen * numberOfTables, height-30);
    self.scrollView.pagingEnabled = YES;
    self.scrollView.bounds = tableBounds;
    [self.view addSubview:self.scrollView];

    //put five tables
    CGRect tableFrame = tableBounds;
    tableFrame.origin.x = 0;
     for (int i = 0; i < numberOfTables; i++) {

        UITableView *tableView = [[UITableView alloc] initWithFrame:tableFrame style:UITableViewStylePlain];
         tableView.delegate = self;
         tableView.dataSource = self;
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
         if (cell == nil) {
             cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
         }
        switch (i) {
            case 0:
                tableView.backgroundColor = [UIColor yellowColor];
                tableView.tag = 0;
                cell.textLabel.text = @"section = 0 行0";
                break;
            case 1:
                tableView.backgroundColor = [UIColor blueColor];
                tableView.tag = 1;
                break;
            case 2:
                tableView.backgroundColor = [UIColor brownColor];
                tableView.tag = 2;
                break;
            case 3:
                tableView.backgroundColor = [UIColor greenColor];
                break;
            case 4:
                tableView.backgroundColor = [UIColor cyanColor];
                break;
            default:
                break;
        }

        [self.scrollView addSubview:tableView];
        tableFrame.origin.x += self.widthOfTheScreen;

    }
}





- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 3;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    }
    int num = tableView.tag;
    if(num == 1) {
        if(indexPath.row == 0) {
            cell.textLabel.text = @"section = 0 行0";
        } else if(indexPath.row == 1){
            cell.textLabel.text = @"section = 0 行1";
        } else {
            cell.textLabel.text = @"section = 0 行2";
        }
    } else {
        NSString *str = [[NSString alloc] initWithFormat:@"section = %d col %d",indexPath.section,indexPath.row];
        cell.textLabel.text = str;
    }
    return cell;
}

我认为 tableview.tag 会有所帮助,但给了我 5 个相同的表。你们能给我一些想法来解决这个问题吗?

谢谢你。

4

1 回答 1

1

首先,请参阅有关将 a 添加到 a 的答案,Apple 特别警告不要这样做(尽管他们没有在文档中包含警告,而不是您的错)。将您的表格作为子视图添加到NOT a (我建议彻底摆脱它)。UITableViewUIScrollViewUITableViewUIView UIScrollView

UITableViewCell其次,您只在tableView:cellForRowAtIndexPath:方法中创建一个。完全从你的 for 循环中删除所有对 any 的引用UITableCell(那些甚至没有被使用,它是徒劳的)。设置好表的数据源和委托后,调用[tableView reloadData]每个able,数据源方法将被自动调用。

由于您正在处理多个表,因此事情变得更加棘手。您需要保留对类中所有表视图的引用(在数组中,但最好是每个表视图的属性)。

您还需要知道在任何给定时间正在加载哪个表,例如:

-(UITableViewCell*)tablView:tableView cellForRowAtIndexPath:indexPath {
    UITableViewCell *cell;
    if ( tableView == self.tablView1 ) {
        // build your cells for table view 1
    }
    else if ( tableView == self.tableView2 ) {
        // build cells for table view 2
    }

    return cell;
}

对于多个表,您可能需要为每个表考虑一个特定的委托,特别是如果每​​个表背后的数据模型大不相同,和/或每个表的 UI 都不同。

我不知道您的确切需求,但也考虑一个包含多个部分的表而不是多个表。

我还鼓励您阅读iOS TableView 编程指南,以及关于 Delegates 和 Data Sources的内容。

于 2013-03-05T02:57:37.957 回答