我有一个有4个部分的UITableView
。其中三个部分有一个标题视图。
header视图是一个UITableViewCell
,我将它作为viewForHeaderInSection:
委托中的一个普通单元格从队列中取出。
如果在任何部分插入或删除一行,其他tableview
标题单元格将消失。
我假设这与单元格重用有关,但是单元格最初都出现在屏幕上(所有三个标题同时出现在屏幕上)。
我试过在插入或删除后重新加载其他部分,但没有帮助。
下面是一些代码:
- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
switch (section) {
case kSectionCardInformation:
case kSectionContactInformation:
case kSectionTags: {
static NSString *CellIdentifier = @"EditContactHeaderCell";
EditContactHeaderCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
return cell;
}
default:
return nil;
}
}
这里是我删除relevant部分中的行的地方:
- (void)deleteTag:(CDTag *)tag {
[self.tableView beginUpdates];
NSMutableArray *objects = [self.sections objectAtIndex:kSectionTags];
if ([objects containsObject:tag]) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[objects indexOfObject:tag] inSection:kSectionTags];
[objects removeObject:tag];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationMiddle];
[self.contact deleteTag:tag];
}
[self.tableView endUpdates];
}
任何帮助,非常感谢。
7条答案
按热度按时间rjzwgtxy1#
只需将UITableViewCell Package 到UIView中。
}
zd287kbt2#
添加评论,因为我有同样的问题...问题是,我也是使用一个UITableViewCell作为头部,而不是使用一个UITableViewHeaderFooterView。
要解决此问题:
1.创建一个nib文件,并在那里而不是在故事板的UITableView中制作自定义标题。
1.将其链接到自定义UITableViewHeaderFooterView类
1.在viewDidLoad函数中注册此笔尖
1.将可重用的HeaderFooterView从viewForHeaderInSection函数中出队:
这修复了我消失的标题。我希望它能帮助其他人。
1mrurvl13#
返回
cell
的contentView
对我来说非常有效,不需要将单元格 Package 在UIView
中。bvjveswy4#
适用于Swift 4,5
lsmepo6l5#
不要返回FooterCell、HeaderCell或可重用标识符。返回reuseIdentifier. contentView。对我来说,它是:
返回标题单元格!.内容视图。
mcvgt66p6#
解决此问题的正确方法是使用UITableViewHeaderFooterView而不是使用UITableViewCell作为标题部分。如@Francois Nadeau所回答。
有关如何将UITableViewHeaderFooterView用于标题部分的更多详细信息,请参见此答案:https://stackoverflow.com/a/36931047
deikduxw7#
我不知道你为什么用tableview单元格作为标题,但我的假设是
在返回单元格之前检查
nil
条件,如果它为nil,则创建单元格。更新:
然后检查
numberOfSectionsInTableView:(UITableView *)tableView
方法是否返回正确的计数。检查并设置表视图的委托和数据源。