UITableViewCell更新willDisplayCell上的图像

时间:2014-03-20 10:06:47

标签: objective-c uitableview ios7 uiimageview

我正在尝试在插入最后一个(同类)之后更新tableview的第二行。我想要的是在我放入xib的自定义uiimageview中更改图像。 我在插入后立即调用[_tableView reloadData]来实现此功能,但这样插入动画已经消失,性能变差。

以下是我写的代码的一部分:

•在代表中:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    [_dataSource setIsRead:(BOOL)read AtIndexPath:indexPath];
    [_dataSource configureCell:(WMChatTableViewCell *)cell AtIndexPath:indexPath];
    [cell setNeedsUpdateConstraints];
    [cell updateConstraintsIfNeeded];

    [cell setNeedsLayout];
    [cell layoutIfNeeded];
}

•在dataSource

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

WMMessage *message = [self messageAtIndexPath:indexPath];

/**
 Message sent by the user
 */
if ([message.sender_id intValue] == [[[NSUserDefaults standardUserDefaults]valueForKey:kUserIdKey]intValue]) {
    WMRightChatTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:rightTextIdentifier];
    if (cell == nil) {
        cell = [[WMRightChatTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:rightTextIdentifier];
    }

    [self configureCell:cell AtIndexPath:indexPath];

    return cell;
}
/**
 Message sent by the recipient
 */
else{
    WMLeftChatTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:leftTextIdentifier];
    if (cell == nil) {
        cell = [[WMLeftChatTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:leftTextIdentifier];
    }

    [self configureCell:cell AtIndexPath:indexPath];

    return cell;
}

return nil;
}

-(void)configureCell:(WMChatTableViewCell *)cell AtIndexPath:(NSIndexPath *)indexPath{
WMMessage *message = [self messageAtIndexPath:indexPath];

....

/**
 Last message sent by the recipient
 */
if (!([message.sender_id intValue] == [[[NSUserDefaults standardUserDefaults]valueForKey:kUserIdKey]intValue]) &&
    [message isEqual:[[_messagesMatrix lastObject]lastObject]]) {
    /**
    An highlighted version of the background.
    Normally the left cell has the "BoxChat_sx" image, only when it's the last one, the image should change
    */
    [cell.balloonImageView setImage:[UIImage imageNamed:@"BoxChat_sx_new"]];
    ....
}
else if(!([message.sender_id intValue] == [[[NSUserDefaults standardUserDefaults]valueForKey:kUserIdKey]intValue])){
    /*
    If it's not the last anymore, the image should change back to it's original state
    */
    [cell.balloonImageView setImage:[UIImage imageNamed:@"BoxChat_sx"]];
    ...
    }
}

在不调用[_tableView reloadData]的情况下,此代码无法更新imageView。有没有办法在不调用reloadData或至少保持插入动画的情况下实现此功能?

0 个答案:

没有答案