2012-01-10 142 views
2

我正在處理某種聊天iphone應用程序,我正面臨着一個我無法解決的問題。
我看到了幾個答案,但似乎沒有解決這個問題。ios:UITableViewCell在滾動時消失

我使用TableView來顯示消息,當我不時滾動時,單元格會失望。我必須回到父視圖(導航控制器用於推送我的聊天視圖的視圖),然後返回到聊天視圖以查看單元格。

我有以下方法:

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {  
    // static NSString* CellIdentifier = @"MessageCellIdentifier"; 
    // MessageTableViewCell* cell = (MessageTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    //if (cell == nil){ 

    MessageTableViewCell* cell = [[[MessageTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease]; 
    SharethingsAppDelegate *delegate = (SharethingsAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    ChatMessage* message = [[delegate.dataModel getMessagesOfChatWithID:self.chatID] objectAtIndex:indexPath.row]; 
    [cell setMessage:message]; 

    //} 
    return cell; 
} 

我試圖保持測試「細胞==零」,但同樣的事情。
我想這是某種細胞重複使用的問題,但......無法真正弄清楚它到底是什麼。

有什麼想法?

+0

該代碼看起來不錯,所以我不確定發生了什麼事情。你是否檢查過消息消失後​​'消息'仍然是非'nil'?此外,你的任何機會'tableView:numberOfRowsInSection:'開始返回'0'? – mattjgalloway 2012-01-10 09:46:07

+0

@mattjgalloway其實我可以看到行(我使用自定義視圖單元格),但內容是空的。我會添加更多日誌並保持發佈。謝謝。 – Luc 2012-01-10 10:07:36

+0

如果內容爲空,那麼可以推測'message'是'nil'或者你的自定義單元沒有正確響應'setMessage:'並相應地重畫自己。儘管懷疑後者,因爲您目前每次都在創建新單元格。 – mattjgalloway 2012-01-10 10:10:02

回答

0

這可能是因爲你的UITableView認爲你的細胞看不見,並將其移除。如果tableview的框架不夠大,並且實際上正在查看溢出的內容,則會發生這種情況。

嘗試將tableview中的.clipsToBounds屬性設置爲YES(在代碼中)或檢查它上面的「剪輯子視圖」複選標記(在IB中)。這樣,你會看到tableview的實際邊界。

+0

clipsToBounds不會做什麼:( – Luc 2012-01-12 13:28:23

+0

它不應該做任何詭計,但它可能會解決您的問題。您能否更具體地瞭解細胞如何/何時消失?它是否與任何操作相關? (重新加載,滾動,...?) – mvds 2012-01-12 13:34:36

+0

是的,它鏈接到視圖的負載(所有項目的顯示),也滾動時。 – Luc 2012-01-12 13:48:06

2

我遇到了和你一樣的問題。在我的情況下,我使用自定義單元格,並在我設置其高度的方法中使用我的heightForRowAtIndexPath:(NSIndexPath *)indexPath方法。當你開始滾動時,單元格會消失,但只有當行的高度變爲時,纔會變小然後是我的自定義單元格的高度。否則,它工作正常!