私は受信者の送信者名を表示しています。しかし、私は人が送信するすべてのテキストに名前を表示したくありません。たとえば、彼/彼女がメッセージを連続して送信する場合、最初のメッセージの上に名前を表示するだけです。私はここに私のチャットのスクリーンショットを提供します:つまりSwift JSQMessagesViewControllerの名前の先頭に
を、私はちょうどそれが彼/彼女が送信非常に「最初の」のメッセージにユーザーの名前を表示したいです。私はattributedTextForMessageBubbleTopLabelAt
で運がないこの問題を解決しようとしました。
前のメッセージの送信者IDが以前の送信者IDと等しいかどうかを確認しようとしましたが、表示可能かどうかは何とか分かります。しかし、これにより、オプションのエラー、範囲外のインデックス、および単純に動作するソリューションでは、多くの、多くの試みが失敗しました。
これは私が今持っているコードです:これは、あなたが最初にそれを見たときに解決するために、最初は難しい問題である
let message = messages[indexPath.item]
switch message.senderId {
case FIRAuth.auth()!.currentUser!.uid:
return nil
break
default:
guard let senderDisplayName = message.senderDisplayName else {
assertionFailure()
return nil
}
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = NSTextAlignment.left
let attributedString = NSAttributedString(string: message.senderDisplayName,
attributes: [
NSParagraphStyleAttributeName: paragraphStyle,
NSBaselineOffsetAttributeName: NSNumber(value: 0)
])
return attributedString
break
}
こんにちはダニエルと幸運を助けること希望
と同じです!まず、お手伝いをしてくれてありがとう、ありがとう。残念ながら、私は奇妙なエラーに遭遇しました。あなたが知っているように、あなたのコードは実際に働いていて、私が最後に得た「範囲外のインデックス」エラーを私に与えませんでした。問題は今、「最初のメッセージ」に名前が表示されないということです。それは2番目にのみ表示されます。私は 'firstMessageInSet'関数で演奏しようとしましたが、運がありません。なぜこれが起こるか知っていますか?私はとても近いです! – askaale
3つのメッセージを連続して送信してみます。 2番目と3番目のメッセージに送信者の表示名がある場合は、そのメソッドのロジックを入れ替えた可能性があります。 –
これは 'return firstMessageInSet(indexOfMessage:indexPath)ですか?なぜなら、私はスイッチ(message.senderId)を使用して、コードをデフォルトに置くからです。つまり、このコードはデフォルトで使用されています。つまり、NSAttributedString(string:message.senderDisplayName):nil } '悪い答えを返す –