2

を使ってアプリを開発していJSQMessagesViewControllerます。ただし、メッセージの吹き出しが不規則な順序で並んでいるという問題がありますcollectionView

ここにスクリーンショットがあります

ここに画像の説明を入力

コードは次のとおりです。

import UIKit

class mDetailContainerViewController: JSQMessagesViewController, JSQMessagesCollectionViewDelegateFlowLayout{


    var userName = ""
    var messages = [JSQMessage]()
    let incomingBubble = JSQMessagesBubbleImageFactory().incomingMessagesBubbleImageWithColor(UIColor.lightGrayColor())
    let outgoingBubble = JSQMessagesBubbleImageFactory().incomingMessagesBubbleImageWithColor(UIColor.greenColor())

    override func viewDidLoad() {
        super.viewDidLoad()

        self.userName = "iPhone"

        for i in 1...10{

            var sender =  (i%2 == 0) ? "Syncano" : self.userName
            var message = JSQMessage(senderId: sender, displayName: sender, text: "Text")
            self.messages += [message]


        }

        self.collectionView.reloadData()
        self.senderDisplayName = self.userName
        self.senderId = self.userName
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func collectionView(collectionView: JSQMessagesCollectionView!, messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData! {
        var data = self.messages[indexPath.row]
        return data
    }

    override func collectionView(collectionView: JSQMessagesCollectionView!, messageBubbleImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageBubbleImageDataSource! {
        var data = self.messages[indexPath.row]
        if (data.senderId == self.senderId){

            return self.outgoingBubble

        }else{

            return self.incomingBubble

        }
    }

    override func collectionView(collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageAvatarImageDataSource! {
        return nil
    }

    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return self.messages.count
    }

    override func didPressSendButton(button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: NSDate!) {
        var message = JSQMessage(senderId: senderId, displayName: senderDisplayName, text: text)
        messages += [message]
        self.finishSendingMessage()
    }

    override func didPressAccessoryButton(sender: UIButton!) {

    }

インターネットで解決策を少し検索しましたが、すべての手順が複雑です。私は何も理解していませんでした。その上、解決策を見つけたかどうかはわかりません。誰かが解決策を簡単に説明してくれれば幸いです。

注:JSQMessagesViewControllerはコンテナー ビューで表示されます。

最後に、ローカリゼーションを使用して送信ボタンのタイトルとテキスト フィールドのプレースホルダーを変更するにはどうすればよいですか。

ありがとう。

4

4 に答える 4

4

私はこのSDKに精通していませんが、これらの行の両方が原因だと思います

let incomingBubble = JSQMessagesBubbleImageFactory().incomingMessagesBubbleImageWithColor(UIColor.lightGrayColor())
let outgoingBubble = JSQMessagesBubbleImageFactory().incomingMessagesBubbleImageWithColor(UIColor.greenColor())

ですincomingMessagesBubbleImageWithColor。発信バブルをJSQMessagesBubbleImageFactory().outgoingMessagesBubbleImageWithColor(存在する場合)に設定します。

そして、私はこれまでこのメッセージクラスを使用したことがありませんが、緑色のテキストとの配置の問題は、次のような方法で解決できると思います...

outgoingBubble.textLabel.textAlignment = NSTextAlignment.Center
于 2015-08-04T13:32:57.113 に答える
1

将来これで問題が発生した場合は、コードが次のようになっていないことを確認してください。

override func collectionView(collectionView: JSQMessagesCollectionView!, messageBubbleImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageBubbleImageDataSource! {

    let data = messages[indexPath.row]

    if data.senderId == currentUser.objectId! {
       return incomingBubble
    } else {
        return outgoingBubble
    }
}

次のようになります。

override func collectionView(collectionView: JSQMessagesCollectionView!, messageBubbleImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageBubbleImageDataSource! {

    let data = messages[indexPath.row]

    if data.senderId == PFUser.currentUser()!.objectId! {
        return outgoingBubble
    } else {
        return incomingBubble
    }
}

それは私のためにそれを修正しました!

于 2016-07-11T13:34:39.650 に答える