TableView更新没有发生

时间:2014-04-24 09:58:11

标签: ios uitableview

我从tableview中随机插入和删除行。但是,如果要删除的行不在视图中,则当给定行返回查看时,它们实际上不会在UI中删除。

如果我只在可见行上添加和删除行,它就可以正常工作。可能导致这个问题的原因是什么?

- (void)sectionHeaderView:(BaseSectionHeaderView *)sectionHeaderView sectionOpened:(NSInteger)sectionOpened {
    LogInfo(@"opening section:%ld",sectionOpened);
    [_dataSource setSectionAtIndex:sectionOpened Open:YES];

    /*
     Create an array containing the index paths of the rows to insert: These correspond to the rows for each quotation in the current section.
     */

    NSInteger countOfRowsToInsert = [_dataSource tableView:_tableView numberOfRowsInSection:sectionOpened];
    NSMutableArray *indexPathsToInsert = [[NSMutableArray alloc] init];
    for (NSInteger i = 0; i < countOfRowsToInsert; i++) {
        [indexPathsToInsert addObject:[NSIndexPath indexPathForRow:i inSection:sectionOpened]];
    }

    /*
     Create an array containing the index paths of the rows to delete: These correspond to the rows for each quotation in the previously-open section, if there was one.
     */
    NSMutableArray *indexPathsToDelete = [[NSMutableArray alloc] init];
    if (self.openSection.openSectionHeaderView != nil) {


        [_openSection.openSectionHeaderView toggleOpenWithUserAction:NO];
        //       NSInteger countOfRowsToDelete = [_purchaseInvoiceListTable.tableView numberOfRowsInSection:self.openSection.openSectionIndex];
        NSInteger countOfRowsToDelete = [_dataSource tableView:_tableView numberOfRowsInSection:self.openSection.openSectionIndex];
        [_dataSource setSectionAtIndex:self.openSection.openSectionIndex Open:NO];
        for (NSInteger i = 0; i < countOfRowsToDelete; i++) {
            [indexPathsToDelete addObject:[NSIndexPath indexPathForRow:i inSection:self.openSection.openSectionIndex]];
        }

    }


    // style the animation so that there's a smooth flow in either direction
    UITableViewRowAnimation insertAnimation;
    UITableViewRowAnimation deleteAnimation;
    if (self.openSection.openSectionHeaderView == nil || sectionOpened < self.openSection.openSectionIndex) {
        insertAnimation = UITableViewRowAnimationTop;
        deleteAnimation = UITableViewRowAnimationBottom;
    }
    else {
        insertAnimation = UITableViewRowAnimationBottom;
        deleteAnimation = UITableViewRowAnimationTop;
    }


    // apply the updates
    [_tableView beginUpdates];
    [_tableView insertRowsAtIndexPaths:indexPathsToInsert withRowAnimation:insertAnimation];
    [_tableView deleteRowsAtIndexPaths:indexPathsToDelete withRowAnimation:deleteAnimation];
    [_tableView endUpdates];

    self.openSection.openSectionIndex = sectionOpened;
    self.openSection.openSectionHeaderView = sectionHeaderView;
    self.openSection.sectionHeight = [NSNumber numberWithFloat:sectionHeaderView.frame.size.height];
    LogInfo(@"sectionOpened:%ld",sectionOpened);
}

1 个答案:

答案 0 :(得分:0)

我认为您应该重新加载表格视图......

[tableView reloadData];

如果从中获取预期结果,则从数组中删除填充表视图行的对象。我认为这肯定会奏效......

告诉我它是否有效......