我创建了一个可编辑的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;
}
提前致谢。
答案 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模式的正确分段数。
由于这只是一种解决方法,我会将此问题标记为无人接听。