numberOfRowsInSection返回0时的UITableView间隙

时间:2011-04-24 16:13:26

标签: uitableview return-value tableviewcell

我创建了一个可编辑的UITableView,它支持我自己设计的几个自定义UITableViewCell。每当用户创建新记录或修改现有记录时,他们都会使用此UITableView。我使用分组样式表视图将表视图划分为tableViewCells组。

当用户正在编辑记录时,我不希望显示第1部分。为了实现这一点,我在调用numberOfRowsInSection方法时返回0。一切正常,但是第0节和第2节之间存在“轻微的视觉差距”,如果可能的话我希望消除。我想避免重新编码表视图控制器来动态处理indexPaths。我的许多indexPath(部分和行)都是硬编码的。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

printf("CustomEntryViewController, -tableView:numberOfRowsInSection:\n");

if (tableView == self.customEntryTableView) {

    if (section == 0) 

        return 1;

    else if (section == 1) {

        if ([self.entryMode isEqualToString:@"ADD"]) 
            return 2;
        else if ([self.entryMode isEqualToString:@"EDIT"])
            return 0;

    }
    else if (section == 2)

        return 1;

    else if (section == 3)

        return 1;

    else if (section == 4 && self.uisegQuantityAnswer.selectedSegmentIndex == 0) 

        return 1;

}

return 0;
}

提前致谢。

1 个答案:

答案 0 :(得分:1)

我找到了问题的解决方法。我在视图控制器中创建了两个辅助方法,以虚拟化tableView委托传递给我的部分。每当我打算在表视图中禁用一个部分时,虚拟部分就会跳过我写的逻辑。

- (NSIndexPath *)virtualIndexPath:(NSIndexPath *)indexPath {

    return [NSIndexPath indexPathForRow:indexPath.row inSection:[self virtualSection:indexPath.section]]; 

}


- (NSUInteger)virtualSection:(NSUInteger)section {

    NSUInteger virtualSection;

    if ([self.entryMode isEqualToString:@"ADD"])

        virtualSection = section;

    else if ([self.entryMode isEqualToString:@"EDIT"]) {

        if (section == 0) 
            virtualSection = section;

        else if (section > 0)
            virtualSection = section + 1;

    }

    return virtualSection;

}

然后我在整个应用程序的其余部分调用上述方法之一。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    NSUInteger virtualSection = [self virtualSection:section];

    if (tableView == self.customEntryTableView) {

        if (virtualSection == 0) {

// Additional code....

除此之外,我还修改了-tableView:numberOfSectionsInTableView:方法,以返回每个ADD与EDIT模式的正确分段数。

由于这只是一种解决方法,我会将此问题标记为无人接听。