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