在UITableviewCell中显示气泡图像

时间:2015-10-02 04:52:42

标签: ios objective-c uitableview xmppframework

如果从图像拾取器中的图像(请参阅下面的代码示例)中选择作为消息气泡(参见下面的屏幕截图),如何在UITableviewCell中显示图像?

我正在使用XMPPFramework制作聊天应用。我使用了这个Link的实现来在“tableview”单元格中显示一个用于接收和发送消息的语音气泡。

当我选择图像或视频时,我想像在其他聊天应用程序中一样显示该图像。

以下是UITableviewCell行的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *s = (NSDictionary *) [messages objectAtIndex:indexPath.row];
NSLog(@"s:-%@",s);

static NSString *CellIdentifier = @"MessageCellIdentifier";

SMMessageViewTableCell *cell = (SMMessageViewTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)
{
    //cell = [[SMMessageViewTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] ;
    cell=[[SMMessageViewTableCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

NSString *sender = [s objectForKey:@"sender"];
NSString *message = [s objectForKey:@"msg"];
//NSString *time = [s objectForKey:@"time"];

CGSize  textSize = { 260.0, 10000.0 };

CGSize size = [message sizeWithFont:[UIFont boldSystemFontOfSize:13]
                  constrainedToSize:textSize
                      lineBreakMode:NSLineBreakByWordWrapping];

size.width += (padding/2);

cell.messageContentView.text = message;
cell.accessoryType = UITableViewCellAccessoryNone;
cell.userInteractionEnabled = NO;
cell.backgroundColor=[UIColor clearColor];
UIImage *bgImage = nil;

if ([sender isEqualToString:@"you"])
{ // left aligned
    bgImage = [[UIImage imageNamed:@"aqua.png"] stretchableImageWithLeftCapWidth:24  topCapHeight:15];

    [cell.messageContentView setFrame:CGRectMake(360 - size.width - padding,
                                                 padding*2,
                                                 size.width,
                                                 size.height+10)];

    UIImageView *imgview=[[UIImageView alloc]initWithFrame:CGRectMake(360 - size.width -padding, padding*2, size.width, size.height+10)];
    imgview.image=image;

    [cell.messageContentView addSubview:imgview];


    [cell.bgImageView setFrame:CGRectMake(cell.messageContentView.frame.origin.x - padding/10,cell.messageContentView.frame.origin.y - padding/10,size.width+padding,size.height+padding)];
}
else
{
    bgImage = [[UIImage imageNamed:@"orange.png"] stretchableImageWithLeftCapWidth:24  topCapHeight:15];

    [cell.messageContentView setFrame:CGRectMake(padding, padding*2, size.width, size.height+10)];

    [cell.bgImageView setFrame:CGRectMake(cell.messageContentView.frame.origin.x - padding/10,cell.messageContentView.frame.origin.y - padding/10,size.width+padding,size.height+padding)];
}

cell.bgImageView.image = bgImage;
//cell.senderAndTimeLabel.text = [NSString stringWithFormat:@"%@ %@", sender, time];
cell.senderAndTimeLabel.text = [self GetDateAndTime];

return cell;
}

enter image description here

1 个答案:

答案 0 :(得分:0)

在消息对象中,引入一个标志以确定消息类型。我们假设您将其命名为isText。为文本设置为YES,但为媒体消息设置为NO(您可以在uiimagepicker委托方法中执行此操作。现在在cellForRowAtIndexPath中,您可以检查媒体类型。如果是'否#39;,你应该在单元格中插入uiimageview作为子视图来显示该图像。确保将边距留在该子视图的边界内,以便将其正确地包含在语音气泡中。 要确保语音气泡相应地调整自己的大小,现在您还必须编辑heightForRowAtIndexPath方法。在第一行中,您将获得消息对象,再次检查该标志。如果为NO,则将单元格的返回高度返回到msgImage.frame.size.height +(父视图的上边距)+(父视图的下边距)。左边距和右边距将通过将此imageView居中到其中心(即讲话气泡)来固定。