2014-01-30 24 views
0

所以我做了一些自定义表格视图单元格,他们绘制正确,看起来不错,但是一旦我滚过可见单元格的边缘,他们开始重用,这很好,除了当我向后滚动重用单元格时仍然显示并且不重绘。特别是除了最上面的单元外,所有的单元看起来都是一样的。如何在重用后独特地绘制自定义UITableViewCell顶层单元格?

图片详细介绍了发生:

desiredthen scroll down then scroll upand the issue

我怎么有这样的编码时,是当细胞获得制造如果indexPath.row大于0添加“重叠效应”这只是在UITableViewCell的contentView上的自定义绘图下放置的uiview上的渐变。

这是我怎么加在的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; 
} 

我将如何实现这个[细胞removeOverlap]?

+0

你在哪里创建单元格如果单元格== nil? – stosha

回答

1

所以在我发布这个问题后,我发现了这个问题,因为我有这个问题,并且以前没有找到任何有关这个问题的信息,我会分享。

所以每当

PostCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath] 

被调用时,表视图或者创建一个新的小区或重用一个旧的。当一个新的单元格被创建并且它不是顶层单元格(indexPath.row == 0)时,它将重叠添加到UITableViewCell。如果它重新使用单元格,那么该方法仍会被调用,而不管什么单元格被重用。所以自然地,一旦顶部创建的单元格被重用,渐变视图仍然会被添加到cell.contentView中,即使我再次使用顶部单元格时,它仍然保留在那里。

事实上,以这种方式添加重叠视图会将多个重叠视图堆叠到同一个单元格中。

那么必须做什么(如果您打算以这种方式定制单元外观)是在单元的每次重用之前删除添加的视图。所以你必须覆盖自定义的tableviewcell的prepareForReuse方法,并像这样做。

- (void) prepareForReuse { 
    [super prepareForReuse]; 
    [self removeOverlap]; 
} 

SURE细胞具有重叠视图,否则您的应用程序试图通过将删除视图不存在断裂。所以有类似的东西

- (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]; 
    } 
} 
1

试试这个

if (indexPath.row == 0) { 
    //remove overlap here 

} else { 

    [cell addOverlap]; 
} 

怎么一回事,因为,除了第一小区都有overlap.On滚动重复使用的电池有重叠。因此,对于第一个单元格,如果存在,则删除重叠。

+0

这不符合你的期望,只要一个单元格被重用[cell addOverlap];被称为并且一个新的重叠视图被添加到单元格中,所以它们的堆叠速度非常快,并且只有当顶部单元格在'addOverlap'中再次出现 – Jeremy

+0

时,才会删除它们,您可以检查是否存在重叠。根据你的解决方案,除了第一个单元格,你删除并添加重叠。这真的是必需的。?只要在'(indexPath.row == 0)'删除重叠(如果存在)',并添加重叠(否则)。 – Akhilrajtr

相关问题