Когда я добавляю несколько тестовых сообщений, на экране отображаются только два из них. Другие сообщения явно присутствуют, потому что я могу их скопировать, но цвета просто не отображаются. Когда я прокручиваю, появляются два новых текста, но их все еще только два. Ниже приведены некоторые примеры.
Первый скриншот показывает, когда экран загружается впервые. второй показывает, когда я перемещаю его. Третий показывает, что другие сообщения существуют, но не видны. Любые идеи о том, как это исправить? Кроме того, как мне сделать, чтобы имена отображались? Есть ли хорошее руководство по этому в Swift?
Вот код, который я использовал:
var messages = [JSQMessage]()
var incomingBubbleImageView = JSQMessagesBubbleImageFactory.incomingMessageBubbleImageViewWithColor(UIColor.jsq_messageBubbleLightGrayColor())
var outgoingBubbleImageView = JSQMessagesBubbleImageFactory.outgoingMessageBubbleImageViewWithColor(UIColor.jsq_messageBubbleGreenColor())
override func viewDidLoad() {
super.viewDidLoad()
self.sender = UIDevice.currentDevice().identifierForVendor?.UUIDString
messages += [JSQMessage(text: "hello", sender: self.sender)]
messages += [JSQMessage(text: "hello", sender: "other")]
messages += [JSQMessage(text: "hello", sender: self.sender)]
messages += [JSQMessage(text: "hello", sender: "other")]
messages += [JSQMessage(text: "hello", sender: self.sender)]
messages += [JSQMessage(text: "hello", sender: "other")]
reloadMessagesView()
}
func reloadMessagesView() {
self.collectionView?.reloadData()
}
А вот код расширения для методов делегата:
extension TestJSQ {
override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print(self.messages.count)
return self.messages.count
}
override func collectionView(collectionView: JSQMessagesCollectionView!, messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData! {
let data = self.messages[indexPath.row]
return data
}
// переопределить func collectionView(collectionView: JSQMessagesCollectionView!, didDeleteMessageAtIndexPath indexPath: NSIndexPath!) { // self.messages.removeAtIndex(indexPath.row)
override func collectionView(collectionView: JSQMessagesCollectionView, bubbleImageViewForItemAtIndexPath indexPath: NSIndexPath) -> UIImageView {
let data = messages[indexPath.row]
switch(data.sender) {
case self.sender:
return self.outgoingBubbleImageView
default:
return self.incomingBubbleImageView
}
}
override func collectionView(collectionView: JSQMessagesCollectionView!, avatarImageViewForItemAtIndexPath indexPath: NSIndexPath!) -> UIImageView! {
return nil
}
}
Любая помощь приветствуется!!!
[self.collectionView.collectionViewLayout invalidateLayoutWithContext:[JSQMessagesCollectionViewFlowLayoutInvalidationContext context]];
перед вызовом[self.collectionView reloadData];
- person Gianni Carlo   schedule 22.03.2016JSQMessagesViewController
? Вы реализуетеviewWillAppear
и/илиviewDidAppear
, если да, можете ли вы проверить, вызываете ли вы соответствующий аналог Swift[super viewWillAppear:animated]
или[super viewDidAppear:animated]
? - person Gianni Carlo   schedule 23.03.2016collectionView:attributedTextForMessageBubbleTopLabelAtIndexPath:
метод изJSQMessagesCollectionViewDataSource
- person Gianni Carlo   schedule 23.03.2016