2012-01-10 105 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方法。当你开始滚动时,单元格会消失,但只有当行的高度变为时,才会变小然后是我的自定义单元格的高度。否则,它工作正常!