0

JSQMessagesCollectionViewCell로 UICollectionView를로드하는 JSQMessagesViewController를 사용하고 있습니다.JSQMessagesViewController에서 프로그래밍 방식으로 cellBottomLabel을 변경하는 방법은 무엇입니까?

collectionView : attributedTextForCellBottomLabelAtIndexPath :에 cellBottomLabel 텍스트를 설정하고 잘 작동합니다.

그러나이 텍스트를 프로그래밍 방식으로 새로 고침해야합니다. 셀을 다시로드하면 모든 것이 정상적으로 작동하지만 성능을 고려하여이 작업을 수행하고 싶지 않습니다.

JSQMessagesCollectionViewCell *cell = (JSQMessagesCollectionViewCell *)[self.collectionView cellForItemAtIndexPath:indexPath]; 
cell.cellBottomLabel.text = @"TEST"; 

을하지만 스크롤하고 (셀이 다시로드 할 때) 다음 물러서지 않는 한이 텍스트를 새로 고침되지 않습니다

나는 셀에서 cellBottomLabel에 액세스하려고.

디버거는 원하는 텍스트가 포함 된 cell.cellBottomLabel을 보여 주지만 셀 디스플레이에서 어떻게 새로 고칠 수 있습니까?

미리 감사드립니다.

+0

메인 스레드에서 위의 사항을 업데이트하고 있는데 한 번 확인해 주실 수 있습니까? –

+0

실제로 원하는 것은 무엇입니까? 자세히 설명해 주시겠습니까 –

답변

0

스토어 당신의 텍스트 일부 여기서

@interface SomeViewController() 

@property (nonatomic) NSArray<NSString *> *bottomTexts; 

@end 

당신의 새로운 하단에 텍스트를 얻을 때 : 당신이 메인 스레드, 업데이트 배열에있어 가능하면 다음 셀 경우 우선 확인합니다. 그것은 당신이 하나의 셀을 다시로드하거나에서 크기를 조정해야 라벨의 frame.size.height이 경우 0이되기 때문에 다음에 텍스트를 볼 수 없습니다 업데이트되기 전에

dispatch_async(dispatch_get_main_queue(), ^{ 
    NSMutableArray<NSString *> *newBottomTexts = [self.bottomTexts mutableCopy]; 
    newBottomTexts[someIndex] = newText; 
    self.bottomTexts = newBottomTexts; 
    JSQMessagesCollectionViewCell *cell = (JSQMessagesCollectionViewCell *)[self.collectionView cellForItemAtIndexPath:indexPath]; 
    cell.cellBottomLabel.text = newText; 
}); 

그러나 경우 셀

하지 하단에 텍스트를했다 가장 작은.

+0

문제가있는 경우 게시 샘플을 보내 주시면 도와 드리겠습니다. –

0

setNeedsDisplay()으로 전화 해보세요. UI 요소의 다시 그리기로 인해 텍스트가 강제로 업데이트됩니다.