带章节的UITableView问题?

时间:2014-01-20 15:42:16

标签: ios objective-c uitableview ios7

我还没有完全理解UITableView中的部分,但这是我到目前为止所得到的:

我的问题How can i figure out how much Data to put in each section?

基本上,我有解析的JSON数据,然后将数据保存到NSMutableArray中。 这是我现在用来制作这两个部分的代码:

- (NSString*) tableView:(UITableView *) tableView titleForHeaderInSection:(NSInteger)section
{
    if (section == 0){
        return @"Section 1";
    }
    else{
        return @"Section 2";
    }
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}

这完美无缺。它为TableView添加了两个Sections。我的问题是将某些数据输入每个部分。

在JSON数据内部进行解析,每个对象都有一个Date,我将其与当前日期进行比较。如果Date在今天之后,我将它添加到Section 1.如果不是,那么我将它添加到Section 2。

以下是我处理的方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ... // Date Stuff

    if (indexPath.section== 0 && isNewEvent) {
        cell.textLabel.text = [[events objectAtIndex:indexPath.row] objectForKey:@"opponent"];
        cell.detailTextLabel.text = [NSString stringWithFormat:@"Date: %@ | Time: %@", [[events objectAtIndex:indexPath.row] objectForKey:@"date"], [[events objectAtIndex:indexPath.row] objectForKey:@"time"]];
        cell.detailTextLabel.textColor = [UIColor grayColor];

        cell.imageView.image = [UIImage imageNamed:@"sports.png"];
        return cell;
    }
    else
    {
        cell.textLabel.text = [[events objectAtIndex:indexPath.row] objectForKey:@"opponent"];
        cell.detailTextLabel.text = [NSString stringWithFormat:@"Date: %@ | Time: %@", [[events objectAtIndex:indexPath.row] objectForKey:@"date"], [[events objectAtIndex:indexPath.row] objectForKey:@"time"]];
        cell.detailTextLabel.textColor = [UIColor grayColor];

        cell.imageView.image = [UIImage imageNamed:@"sports.png"];
        return cell;
    }
}

我认为这很有效,但我在两个部分都得到了重复数据。我相信这是因为这段代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if(section == 0){
       // return [events count];
    }
    else{
       // return [events count];
    }
}

在完成此CODE cellforrowatindexpath之前,我不知道如何知道我将在每个部分放入多少数据。

如果您需要更多代码,我将非常乐意将其提供给您。谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

应在应用调用cellForRowAtIndexPath

之前完成所有处理

您应用的流程应为:

viewDidLoad方法中,您应该解析所有数据。此时,您应该知道哪些对象应该进入哪个部分。例如。可能有2个数组,第一个数组和第二个数组。获取所有数据,循环遍历,将对象添加到每个数组中。

然后在这一点上你可以说:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if(section == 0){
       return [arrayOne count];
    }
    else{
       return [arrayTwo count];
    }
}