2014-01-30 54 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

相關問題