UIScrollView中UITableViews的数据源

时间:2013-03-05 02:29:40

标签: iphone objective-c xcode uitableview

我正在使用几个垂直放置的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张相同的表格。 你们能给我一些解决这个问题的想法吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

首先,请参阅this answer关于向UITableView添加UIScrollView,Apple特别警告它(尽管它们未在UITableView文档中添加警告, 不是你的错)。将您的表格作为子视图添加到UIView a UIScrollView(我建议将其删除)。

其次,您只能在UITableViewCell方法中创建tableView:cellForRowAtIndexPath:。完全从你的for循环中删除对任何UITableCell的所有引用(甚至没有使用它们,它什么都不起作用)。设置表的数据源和委托后,在每个能够调用[tableView reloadData],将自动调用数据源方法。

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

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

-(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 Programming Guidethis on Delegates and Data Sources