所以我制作了一些自定义的表视图单元格并且它们正确绘制并且看起来很棒,但是一旦我滚过可见单元格的边缘它们就开始被重用,这很好,除了当我向后滚动重用的单元格时仍然显示,不要重绘。特别是除了最顶层的细胞外,所有细胞看起来都是一样的。
详细说明事件的图片:
如何编码,就是当indexPath.row大于0时单元格生成时,添加“重叠效果”,这只是放在UITableViewCell的contentView上自定义绘图下面的uiview的渐变。 / p>
这就是我在UITableViewController的tableView中添加重叠效果的方法:cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"APostCell";
PostCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
CustomPost *aPost = [self.posts objectAtIndex:indexPath.row];
if (indexPath.row > 0) {
[cell addOverlap];
}
cell.postDateLabel.text = [aPost datePostedAsString];
return cell;
}
我如何实现[cell removeOverlap]?
答案 0 :(得分:1)
试试这个
if (indexPath.row == 0) {
//remove overlap here
} else {
[cell addOverlap];
}
beacuse,除了第一个单元格都有重叠。滚动重用的单元格有重叠。因此,对于第一个单元格,如果存在则删除重叠。
答案 1 :(得分:1)
因此,在我发布问题后,我发现了问题,因为我有问题并且以前没有找到有关该主题的任何信息,我会分享。
所以每当
PostCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]
调用,表视图要么创建新单元格,要么重用旧单元格。创建新单元格并且它不是顶部单元格(indexPath.row == 0)时,它会将重叠添加到UITableViewCell。如果它重用了单元格,那么无论正在重用哪个单元格,该方法仍会被调用。因此,一旦在顶部创建的单元格被重用,自然会将渐变视图添加到cell.contentView中,即使我再次使用最顶层的单元格,它也会保留在那里。
实际上,以这种方式添加重叠视图会将多个重叠视图堆叠到同一个单元格中。
所以必须要做的事情(如果你打算以这种方式自定义单元格外观)是在单元格的每次重用之前删除添加的视图。所以你必须覆盖自定义tableviewcell的prepareForReuse方法,就这样做。
- (void) prepareForReuse {
[super prepareForReuse];
[self removeOverlap];
}
要确定该单元格具有重叠视图,否则您的应用会因尝试删除不存在的视图而中断。有类似
的东西- (void) removeOverlap {
if ([self.contentView.subviews count] > 1) {
//This method works based on the assumption [cell addOverlap] adds new view
//underneath existing views - like [self.contentView insertSubview:overlappedView atIndex:0];
[[self.contentView.subviews objectAtIndex:0] removeFromSuperview];
}
}