2016-12-30 83 views
0

我在应用程序中集成了Comet Chat功能。我为Group和OneOnOne聊天使用自定义用户界面。这一切都运行良好,但问题是,当我去我的群聊屏幕上,然后我的应用程序变得没有响应。当我滚动我的桌子时,它变得没有反应。Comet Chat iOS无响应UI问题

我已经把调度功能放在我的CellforRowatIndexPath中,用于获取图像链接并显示它们。为此,我使用SdWebImage框架。

这里是我的代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"chatroomchatviewcell"; 
    chatViewCell = [chatTable dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (chatViewCell == nil) { 
     chatViewCell = [[ChatRoomChatViewCellSDK alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 
    else { 
      dispatch_queue_t concurrentQueue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); 
     dispatch_async(concurrentQueue1, ^{ 

     for (UIView *view in chatViewCell.contentView.subviews) { 
      [view removeFromSuperview]; 
     } 
     }); 
    } 

    /* Define maximum contraints */ 
    CGSize constraints = CGSizeMake(((self.view.frame.size.width)*2/3 + 8.0f),100000); 
    CGFloat wrapperViewX = 0.0f; 
    CGFloat wrapperViewWidth = 0.f; 
    CGFloat wrapperViewHeight = 0.f; 

    NSString *messageString = nil; 

    if ([[[messageArray objectAtIndex:indexPath.row] objectForKey:MESSAGE] isKindOfClass:[NSString class]]) { 

     messageString = [NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:MESSAGE]]; 
    } 
    NSString *nameString = nil; 
    NSString *messageType = [NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:MESSAGE_TYPE_KEY]]; 

    UIView *wrapperView = [UIView new]; 
    UITextView *textView = [UITextView new]; 
    UIImageView *imageView = [UIImageView new]; 
    UILabel *nameLabel = [UILabel new]; 
    UILabel *timeLabel = [UILabel new]; 

    wrapperView.layer.cornerRadius = 5 ; 
    wrapperView.clipsToBounds = YES; 

    /* If message is sent by you add Me as the name */ 
    if ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"fromid"]] isEqualToString:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:LOGGED_IN_USER]]]) { 

     nameString = @"Me:"; 

    } else { 
     /* Else append BuddyName in message */ 
     nameString = [NSString stringWithFormat:@"%@:",[[[messageArray objectAtIndex:indexPath.row] objectForKey:FROM] capitalizedString]]; 
    } 

    [nameLabel setFont:[UIFont systemFontOfSize:14.f]]; 
    [nameLabel setNumberOfLines:0]; 
    [nameLabel setLineBreakMode:NSLineBreakByWordWrapping]; 
    NSDictionary *attributesName = [NSDictionary dictionaryWithObjectsAndKeys: [UIFont systemFontOfSize:14.f], NSFontAttributeName, nil]; 
    CGRect nameRect = [nameString boundingRectWithSize:constraints options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributesName context:nil]; 
    CGSize sizeName = nameRect.size; 
    [nameLabel setText:nameString]; 
    attributesName = nil; 

    [nameLabel setFrame:CGRectMake(4.f, 4.f, sizeName.width, sizeName.height)]; 
    [wrapperView addSubview:nameLabel]; 
    if ([messageType isEqualToString:MESSAGE_TYPE_IMAGE]) { 
     UIButton *btnclk = [UIButton new]; 
     btnclk.frame=CGRectMake(4.f, 4.f, 100, 100); 
     [btnclk setTitle:@"" forState:UIControlStateNormal]; 
     btnclk.tag=indexPath.row; 
     [btnclk addTarget:self action:@selector(ShowFullImageVIew:) 
     forControlEvents:UIControlEventTouchUpInside]; 
     dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); 

     //this will start the image loading in bg 
     CGRect imageRect = CGRectMake(4.f, (nameLabel.frame.origin.y + nameLabel.frame.size.height + 4.f), 100.f, 100.f); 
     [imageView setFrame:imageRect]; 
     dispatch_async(concurrentQueue, ^{ 
      NSURL *imgUrl = [NSURL URLWithString:messageString]; 

      //this will set the image when loading is finished 

      dispatch_async(dispatch_get_main_queue(), ^{ 
       if (messageString == nil) { 

        [imageView setImage:[UIImage imageWithData:[[messageArray objectAtIndex:indexPath.row] objectForKey:MESSAGE]]]; 

       } else { 
        if ([[NSFileManager defaultManager] fileExistsAtPath:messageString]) { 

         [imageView setImage:[UIImage imageWithContentsOfFile:messageString]]; 
        } else { 
         UIActivityIndicatorView *activityIndicator; 
         activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
         activityIndicator.color = [UIColor redColor]; 

         activityIndicator.center = imageView.center; 

         [imageView addSubview:activityIndicator]; 
         [self.view bringSubviewToFront:activityIndicator]; 

         [activityIndicator startAnimating]; 


         [imageView sd_setImageWithURL:imgUrl completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { 
          [activityIndicator removeFromSuperview];        
         }]; 
        } 
       } 
      }); 
     }); 





     [wrapperView addSubview:imageView]; 
     [wrapperView addSubview:btnclk]; 

     if ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"fromid"]] isEqualToString:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:LOGGED_IN_USER]]]) { 

      if (imageView.frame.size.width > nameLabel.frame.size.width) { 

       wrapperViewX = self.view.frame.size.width - imageView.frame.size.width - 14.f; 
      } else { 
       wrapperViewX = self.view.frame.size.width - nameLabel.frame.size.width - 14.f; 
      } 

     } else { 
      wrapperViewX = 7.f; 
     } 

     if (imageView.frame.size.width > nameLabel.frame.size.width) { 

      wrapperViewWidth = 4.f + imageView.frame.size.width + 4.f; 
     } else { 
      wrapperViewWidth = 4.f + nameLabel.frame.size.width + 4.f; 
     } 

     wrapperViewHeight = imageView.frame.origin.y + imageView.frame.size.height + 4.f; 

    } else if ([messageType isEqualToString:MESSAGE_TYPE_STICKER]) { 

     CGRect imageRect = CGRectMake(4.f, (nameLabel.frame.origin.y + nameLabel.frame.size.height + 4.f), 100.f, 100.f); 

     if (messageString == nil) { 

      [imageView setImage:[UIImage imageWithData:[[messageArray objectAtIndex:indexPath.row] objectForKey:MESSAGE]]]; 

     } else { 

      [imageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"StickersFramework.bundle/%@",messageString]]]; 

     } 

     [imageView setFrame:imageRect]; 
     [wrapperView addSubview:imageView]; 

     if ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"fromid"]] isEqualToString:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:LOGGED_IN_USER]]]) { 

      if (imageView.frame.size.width > nameLabel.frame.size.width) { 

       wrapperViewX = self.view.frame.size.width - imageView.frame.size.width - 14.f; 
      } else { 
       wrapperViewX = self.view.frame.size.width - nameLabel.frame.size.width - 14.f; 
      } 

     } else { 
      wrapperViewX = 7.f; 
     } 

     if (imageView.frame.size.width > nameLabel.frame.size.width) { 

      wrapperViewWidth = 4.f + imageView.frame.size.width + 4.f; 
     } else { 
      wrapperViewWidth = 4.f + nameLabel.frame.size.width + 4.f; 
     } 

     wrapperViewHeight = imageView.frame.origin.y + imageView.frame.size.height + 4.f; 

    } else { 

     [textView setFont:[UIFont systemFontOfSize:14.0f]]; 
     [textView setTextContainerInset:UIEdgeInsetsZero]; 
     [textView setBackgroundColor:[UIColor clearColor]]; 

     /* Disable scroll and editing */ 
     [textView setEditable:NO]; 
     [textView setScrollEnabled:NO]; 

     NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init]; 
     [paragraph setLineSpacing:2.0f]; 
     NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: [UIFont systemFontOfSize:14.f], NSFontAttributeName,paragraph ,NSParagraphStyleAttributeName,nil]; 

     [messageString boundingRectWithSize:constraints options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributesDictionary context:nil]; 

     [textView setText:messageString]; 

     CGSize sizeMessage = [textView sizeThatFits:constraints]; 

     textView.frame = CGRectMake(0.0f,(nameLabel.frame.origin.y + nameLabel.frame.size.height + 4.f), sizeMessage.width, sizeMessage.height); 

     [wrapperView addSubview:textView]; 

     if ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"fromid"]] isEqualToString:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:LOGGED_IN_USER]]]) { 

      if (textView.frame.size.width > nameLabel.frame.size.width) { 

       wrapperViewX = self.view.frame.size.width - textView.frame.size.width - 14.f; 
      } else { 
       wrapperViewX = self.view.frame.size.width - nameLabel.frame.size.width - 14.f; 
      } 

     } else { 
      wrapperViewX = 7.f; 
     } 

     if (textView.frame.size.width > nameLabel.frame.size.width) { 

      wrapperViewWidth = 4.f + textView.frame.size.width + 4.f; 

     } else { 
      wrapperViewWidth = 4.f + nameLabel.frame.size.width + 4.f; 
     } 


     wrapperViewHeight = textView.frame.origin.y + textView.frame.size.height + 4.f; 

     attributesDictionary = nil; 
    } 

    [wrapperView setFrame:CGRectMake(wrapperViewX, 7.f, wrapperViewWidth, wrapperViewHeight)]; 


    /* Define timeString & timeLabel */ 
    NSTimeInterval _interval; 
    NSDate *date; 

    if ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"sent"]] length] > 10) { 

     _interval = ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"sent"]] doubleValue]/1000); 
     date = [NSDate dateWithTimeIntervalSince1970:_interval]; 

    } else { 

     _interval = ([[NSString stringWithFormat:@"%@000",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"sent"]] doubleValue]/1000); 
     date = [NSDate dateWithTimeIntervalSince1970:_interval]; 

    } 

    NSDateFormatter *_formatter = [[NSDateFormatter alloc] init]; 
    [_formatter setLocale:[NSLocale currentLocale]]; 
    _formatter.dateStyle = NSDateFormatterMediumStyle; 
    _formatter.timeStyle = NSDateFormatterShortStyle; 
    _formatter.doesRelativeDateFormatting = YES; 

    NSString *timeString = [_formatter stringFromDate:date]; 

    [timeLabel setFont:[UIFont systemFontOfSize:10.f]]; 
    [timeLabel setTextColor:[UIColor colorWithRed:103.0f/255.0f green:103.0f/255.0f blue:103.0f/255.0f alpha:1.0]]; 
    [timeLabel setNumberOfLines:0]; 
    [timeLabel setLineBreakMode:NSLineBreakByWordWrapping]; 
    NSDictionary *attributesTime = [NSDictionary dictionaryWithObjectsAndKeys: [UIFont systemFontOfSize:10.f], NSFontAttributeName, nil]; 
    CGRect timeRect = [timeString boundingRectWithSize:constraints options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributesTime context:nil]; 
    CGSize sizeTime = timeRect.size; 
    [timeLabel setText:timeString]; 


    if ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"fromid"]] isEqualToString:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:LOGGED_IN_USER]]]) { 

     [nameLabel setTextColor:[UIColor whiteColor]]; 
     [textView setTextColor:[UIColor whiteColor]]; 
     [wrapperView setBackgroundColor:[UIColor colorWithRed:49.0f/255.0f green:140.0f/255.0f blue:231.0f/255.0f alpha:1.0f]]; 

     [wrapperView setBackgroundColor:[UIColor colorWithRed:49.0f/255.0f green:140.0f/255.0f blue:231.0f/255.0f alpha:1.0f]]; 

     [timeLabel setFrame:CGRectMake(self.view.frame.size.width - sizeTime.width - 7.f, (wrapperView.frame.origin.y + wrapperView.frame.size.height + 2.f), sizeTime.width, sizeTime.height)]; 

    } else { 


     [wrapperView setBackgroundColor:[UIColor colorWithRed:235.0f/255.0f green:235.0f/255.0f blue:235.0f/255.0f alpha:1.f]]; 

     [wrapperView setBackgroundColor:[UIColor colorWithRed:235.0f/255.0f green:235.0f/255.0f blue:235.0f/255.0f alpha:1.f]]; 

     [timeLabel setFrame:CGRectMake(7.f, (wrapperView.frame.origin.y + wrapperView.frame.size.height + 2.f), sizeTime.width, sizeTime.height)]; 
    } 
    [chatViewCell.contentView addSubview:wrapperView]; 
    [chatViewCell.contentView addSubview:timeLabel]; 
    return chatViewCell; 
} 

在这里我实现聊天功能,这我们必须更新屏幕上的聊天消息,为此我使用NsPostNotifictaionCenter。我也在使用dispatch重新加载我的表,以避免无响应的用户界面问题。在这里我发布代码:

- (void)chatRoomMessageUpdateNotifier: (NSNotification *)notification { 


     dispatch_queue_t concurrentQueue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); 
     dispatch_async(concurrentQueue1, ^{ 

      if ([[[notification userInfo] objectForKey:@"TAG"] isEqualToString:@"0"]) { 
       messageArray = [NSMutableArray new]; 
       [messageArray removeAllObjects]; 
       messageArray = [[notification userInfo] objectForKey:@"data"]; 

       if ([messageArray count] > 0) { 
        dispatch_async(dispatch_get_main_queue(), ^{ 

         [chatTable reloadData]; 

        }); 



       } 

      } 
     }); 

} 

我不知道我在做什么错。这里的主要问题是我的用户界面变得没有反应。所有想法都完全受欢迎。

回答

0

请使用下面的代码。如果您仍然面临任何问题,您可以提出支持票https://my.cometchat.com/tickets,我们的团队将很乐意为您提供进一步的帮助。

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

    static NSString *cellIdentifier = @"chatroomchatviewcellsdk"; 
    chatViewCell = [chatTable dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (chatViewCell == nil) { 
     chatViewCell = [[ChatRoomChatViewCellSDK alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 
    else { 
     for (UIView *view in chatViewCell.contentView.subviews) { 
      [view removeFromSuperview]; 
     } 
    } 

    /* Define maximum contraints */ 
    CGSize constraints = CGSizeMake(((self.view.frame.size.width)*2/3 + 8.0f),100000); 
    CGFloat wrapperViewX = 0.0f; 
    CGFloat wrapperViewWidth = 0.f; 
    CGFloat wrapperViewHeight = 0.f; 

    NSString *messageString = nil; 

    if ([[[messageArray objectAtIndex:indexPath.row] objectForKey:MESSAGE] isKindOfClass:[NSString class]]) { 

     messageString = [NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:MESSAGE]]; 
    } 

    NSString *nameString = nil; 
    NSString *messageType = [NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:MESSAGE_TYPE_KEY]]; 

    UIView *wrapperView = [UIView new]; 
    UITextView *textView = [UITextView new]; 
    UIImageView *imageView = [UIImageView new]; 
    UILabel *nameLabel = [UILabel new]; 
    UILabel *timeLabel = [UILabel new]; 

    wrapperView.layer.cornerRadius = 5 ; 
    wrapperView.clipsToBounds = YES; 

    /* If message is sent by you add Me as the name */ 
    if ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"fromid"]] isEqualToString:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:LOGGED_IN_USER]]]) { 

     nameString = @"Me:"; 

    } else { 
     /* Else append BuddyName in message */ 
     nameString = [NSString stringWithFormat:@"%@:",[[[messageArray objectAtIndex:indexPath.row] objectForKey:FROM] capitalizedString]]; 
    } 

    [nameLabel setFont:[UIFont systemFontOfSize:14.f]]; 
    [nameLabel setNumberOfLines:0]; 
    [nameLabel setLineBreakMode:NSLineBreakByWordWrapping]; 
    NSDictionary *attributesName = [NSDictionary dictionaryWithObjectsAndKeys: [UIFont systemFontOfSize:14.f], NSFontAttributeName, nil]; 
    CGRect nameRect = [nameString boundingRectWithSize:constraints options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributesName context:nil]; 
    CGSize sizeName = nameRect.size; 
    [nameLabel setText:nameString]; 
    attributesName = nil; 

    [nameLabel setFrame:CGRectMake(4.f, 4.f, sizeName.width, sizeName.height)]; 
    [wrapperView addSubview:nameLabel]; 


    if ([messageType isEqualToString:MESSAGE_TYPE_IMAGE]) { 

     CGRect imageRect = CGRectMake(4.f, (nameLabel.frame.origin.y + nameLabel.frame.size.height + 4.f), 100.f, 100.f); 

     if (messageString == nil) { 

      [imageView setImage:[UIImage imageWithData:[[messageArray objectAtIndex:indexPath.row] objectForKey:MESSAGE]]]; 

     } else { 
      if ([[NSFileManager defaultManager] fileExistsAtPath:messageString]) { 

       [imageView setImage:[UIImage imageWithContentsOfFile:messageString]]; 
      } else { 
       [imageView setImageWithURL:[NSURL URLWithString:messageString] placeholderImage:[UIImage imageNamed:@"default_avatar_thumbnail"] options:0 andResize:imageRect.size withContentMode:UIViewContentModeScaleAspectFill]; 
      } 
     } 

     [imageView setFrame:imageRect]; 
     [wrapperView addSubview:imageView]; 

     if ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"fromid"]] isEqualToString:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:LOGGED_IN_USER]]]) { 

      if (imageView.frame.size.width > nameLabel.frame.size.width) { 

       wrapperViewX = self.view.frame.size.width - imageView.frame.size.width - 14.f; 
      } else { 
       wrapperViewX = self.view.frame.size.width - nameLabel.frame.size.width - 14.f; 
      } 

     } else { 
      wrapperViewX = 7.f; 
     } 

     if (imageView.frame.size.width > nameLabel.frame.size.width) { 

      wrapperViewWidth = 4.f + imageView.frame.size.width + 4.f; 
     } else { 
      wrapperViewWidth = 4.f + nameLabel.frame.size.width + 4.f; 
     } 

     wrapperViewHeight = imageView.frame.origin.y + imageView.frame.size.height + 4.f; 

    } else if ([messageType isEqualToString:MESSAGE_TYPE_STICKER]) { 

     CGRect imageRect = CGRectMake(4.f, (nameLabel.frame.origin.y + nameLabel.frame.size.height + 4.f), 100.f, 100.f); 

     if (messageString == nil) { 

      [imageView setImage:[UIImage imageWithData:[[messageArray objectAtIndex:indexPath.row] objectForKey:MESSAGE]]]; 

     } else { 

      [imageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"StickersFramework.bundle/%@",messageString]]]; 

     } 

     [imageView setFrame:imageRect]; 
     [wrapperView addSubview:imageView]; 

     if ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"fromid"]] isEqualToString:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:LOGGED_IN_USER]]]) { 

      if (imageView.frame.size.width > nameLabel.frame.size.width) { 

       wrapperViewX = self.view.frame.size.width - imageView.frame.size.width - 14.f; 
      } else { 
       wrapperViewX = self.view.frame.size.width - nameLabel.frame.size.width - 14.f; 
      } 

     } else { 
      wrapperViewX = 7.f; 
     } 

     if (imageView.frame.size.width > nameLabel.frame.size.width) { 

      wrapperViewWidth = 4.f + imageView.frame.size.width + 4.f; 
     } else { 
      wrapperViewWidth = 4.f + nameLabel.frame.size.width + 4.f; 
     } 

     wrapperViewHeight = imageView.frame.origin.y + imageView.frame.size.height + 4.f; 

    } else { 

     [textView setFont:[UIFont systemFontOfSize:14.0f]]; 
     [textView setTextContainerInset:UIEdgeInsetsZero]; 
     [textView setBackgroundColor:[UIColor clearColor]]; 

     /* Disable scroll and editing */ 
     [textView setEditable:NO]; 
     [textView setScrollEnabled:NO]; 

     NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init]; 
     [paragraph setLineSpacing:2.0f]; 
     NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: [UIFont systemFontOfSize:14.f], NSFontAttributeName,paragraph ,NSParagraphStyleAttributeName,nil]; 

     [messageString boundingRectWithSize:constraints options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributesDictionary context:nil]; 

     [textView setText:messageString]; 

     CGSize sizeMessage = [textView sizeThatFits:constraints]; 

     textView.frame = CGRectMake(0.0f,(nameLabel.frame.origin.y + nameLabel.frame.size.height + 4.f), sizeMessage.width, sizeMessage.height); 

     [wrapperView addSubview:textView]; 

     if ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"fromid"]] isEqualToString:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:LOGGED_IN_USER]]]) { 

      if (textView.frame.size.width > nameLabel.frame.size.width) { 

       wrapperViewX = self.view.frame.size.width - textView.frame.size.width - 14.f; 
      } else { 
       wrapperViewX = self.view.frame.size.width - nameLabel.frame.size.width - 14.f; 
      } 

     } 
     else { 
      wrapperViewX = 7.f; 
     } 

     if (textView.frame.size.width > nameLabel.frame.size.width) { 

      wrapperViewWidth = 4.f + textView.frame.size.width + 4.f; 

     } else { 
      wrapperViewWidth = 4.f + nameLabel.frame.size.width + 4.f; 
     } 


     wrapperViewHeight = textView.frame.origin.y + textView.frame.size.height + 4.f; 

     attributesDictionary = nil; 
    } 

    [wrapperView setFrame:CGRectMake(wrapperViewX, 7.f, wrapperViewWidth, wrapperViewHeight)]; 


    /* Define timeString & timeLabel */ 
    NSTimeInterval _interval; 
    NSDate *date; 

    if ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"sent"]] length] > 10) { 

     _interval = ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"sent"]] doubleValue]/1000); 
     date = [NSDate dateWithTimeIntervalSince1970:_interval]; 

    } else { 

     _interval = ([[NSString stringWithFormat:@"%@000",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"sent"]] doubleValue]/1000); 
     date = [NSDate dateWithTimeIntervalSince1970:_interval]; 

    } 

    NSDateFormatter *_formatter = [[NSDateFormatter alloc] init]; 
    [_formatter setLocale:[NSLocale currentLocale]]; 
    _formatter.dateStyle = NSDateFormatterMediumStyle; 
    _formatter.timeStyle = NSDateFormatterShortStyle; 
    _formatter.doesRelativeDateFormatting = YES; 

    NSString *timeString = [_formatter stringFromDate:date]; 

    [timeLabel setFont:[UIFont systemFontOfSize:10.f]]; 
    [timeLabel setTextColor:[UIColor colorWithRed:103.0f/255.0f green:103.0f/255.0f blue:103.0f/255.0f alpha:1.0]]; 
    [timeLabel setNumberOfLines:0]; 
    [timeLabel setLineBreakMode:NSLineBreakByWordWrapping]; 
    NSDictionary *attributesTime = [NSDictionary dictionaryWithObjectsAndKeys: [UIFont systemFontOfSize:10.f], NSFontAttributeName, nil]; 
    CGRect timeRect = [timeString boundingRectWithSize:constraints options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributesTime context:nil]; 
    CGSize sizeTime = timeRect.size; 
    [timeLabel setText:timeString]; 

    if ([[NSString stringWithFormat:@"%@",[[messageArray objectAtIndex:indexPath.row] objectForKey:@"fromid"]] isEqualToString:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:LOGGED_IN_USER]]]) { 

     [nameLabel setTextColor:[UIColor whiteColor]]; 
     [textView setTextColor:[UIColor whiteColor]]; 
     [wrapperView setBackgroundColor:[UIColor colorWithRed:49.0f/255.0f green:140.0f/255.0f blue:231.0f/255.0f alpha:1.0f]]; 

     [wrapperView setBackgroundColor:[UIColor colorWithRed:49.0f/255.0f green:140.0f/255.0f blue:231.0f/255.0f alpha:1.0f]]; 

     [timeLabel setFrame:CGRectMake(self.view.frame.size.width - sizeTime.width - 7.f, (wrapperView.frame.origin.y + wrapperView.frame.size.height + 2.f), sizeTime.width, sizeTime.height)]; 


    } 
    else { 

     [wrapperView setBackgroundColor:[UIColor colorWithRed:235.0f/255.0f green:235.0f/255.0f blue:235.0f/255.0f alpha:1.f]]; 

     [wrapperView setBackgroundColor:[UIColor colorWithRed:235.0f/255.0f green:235.0f/255.0f blue:235.0f/255.0f alpha:1.f]]; 

     [timeLabel setFrame:CGRectMake(7.f, (wrapperView.frame.origin.y + wrapperView.frame.size.height + 2.f), sizeTime.width, sizeTime.height)]; 

    } 


    [chatViewCell.contentView addSubview:wrapperView]; 
    [chatViewCell.contentView addSubview:timeLabel]; 


    return chatViewCell; 
} 
+0

我已经尝试过ur代码,但它仍然冻结..removed所有的dispatces。跟随乌尔的代码,但它仍然在开发 – Prakash

+0

感谢您的帮助,迈克D!如果你是一家公司并且在员工之间共享一个堆栈溢出账户,那么你最好拥有个人账户。这主要是因为我们更喜欢不签署的问题和答案 - 编辑经常裁剪材料(请参阅我的编辑)。 – halfer