当我不知道会有多少部分时,如何重新加载UITableView的数据?

时间:2011-03-27 01:30:52

标签: objective-c ios uitableview

我对如何在数据更改后重新加载UITableView中的单元格感到困惑。特别是,我遇到的困惑是,新数据可能会有比当前显示的更多或更少的部分。我知道有reloadSections:withRowAnimation:方法,但这需要1:1替换,我可能会或可能不会。

我只想告诉UITableView取消所有内容并重新加载,就像第一次一样。我很感激有人对此有所了解。

提前致谢!

更新

这是我正在使用的代码,我发现问题是在reloadData被调用后没有出列的单元格...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    NSLog(@"%@", cell);

    if (cell == nil) {
        NSLog(@"%d; %d", indexPath.section, vehicle.inventoryCategoriesCount);

        if (indexPath.section < vehicle.inventoryCategoriesCount) {
            NSLog(@"Grouped cell");

            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"Cell"] autorelease];

            NSString *model = [[[vehicle.inventory filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"category == %@", [vehicle.inventoryCategories objectAtIndex:indexPath.section]]] valueForKeyPath:@"@distinctUnionOfObjects.model"] objectAtIndex:indexPath.row];

            cell.textLabel.text = model;
            cell.detailTextLabel.text = [NSString stringWithFormat:@"%d", [[vehicle.inventory filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"model == %@", model]] count]];
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
        } else {
            NSLog(@"Remove cell");

            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"] autorelease];

            cell.textLabel.text = @"Remove an Item";
            cell.textLabel.textColor = [UIColor redColor];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }
    }

    NSLog(@"Adding a cell");

    return cell;
}

2 个答案:

答案 0 :(得分:1)

您可以在表格视图上调用reloadData

[myTableView reloadData];

文档在这里: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html

答案 1 :(得分:0)

如果您正在使用核心数据和获取的结果控制器,那么它非常简单。事实上,如果您构建一个包含表视图的示例核心数据项目,我相信您可以看到这一点。

我想到了两种不同的方法: controller didChangeSection可能就是你要找的东西。第一个是fetchedresultscontroller委托协议的一部分。第二部分是tableviewdatasource协议的一部分。

- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo
       atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {

     switch(type) {
        case NSFetchedResultsChangeInsert:
        [self.noteTableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
        break;

    case NSFetchedResultsChangeDelete:
        [self.noteTableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
        break;
}

}

另一个是:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [[fetchedResultsController sections] count];

}