2016-04-03 89 views
0

我正在嘗試動態更改聊天氣泡背景。經過大量研究後,我認爲這是正確的方法,但我不適合我。任何人都可以爲我解決這個問題嗎?動態更改單個聊天氣泡的背景顏色

在我的課上,我有:

var incomingBubble = JSQMessagesBubbleImageFactory().incomingMessagesBubbleImageWithColor(UIColor(red: 119/255, green: 104/255, blue: 170/255, alpha: 1.0)) 
    let outgoingBubble = JSQMessagesBubbleImageFactory().outgoingMessagesBubbleImageWithColor(UIColor(red: 235/255, green: 63/255, blue: 65/255, alpha: 1.0)) 
    var messages = [JSQMessage]() 

我還創建了一個覆蓋,我認爲泡沫是可以改變的。

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

    switch(data.senderId) { 
    case self.senderId: 
     return self.outgoingBubble 
    default: 
     if(messageStatus == "Some Unique Value") { 
      return JSQMessagesBubbleImageFactory().incomingMessagesBubbleImageWithColor(UIColor(red: 119/255, green: 204/255, blue: 250/255, alpha: 1.0)) 
     } 
     return self.incomingBubble 
     } 
    } 

編輯:代碼更正在可行的地方

回答

0

您展示的方法是委託執行,是爲了讓你改變基於每個氣泡的泡沫信息,它需要有消息數組中的相應對象。

您需要將所有消息對象放在一個數組中,然後在將它們放置在屏幕上時,它將檢查相應的泡泡來自誰並響應相應的泡泡。如果用戶是.senderId,那麼它的一個即將離任的泡泡等等......

這件你可能會丟失的是你需要聲明self.outgoingBubbleself.incomingBubble是什麼。

在班級的頂部,您可以將它們聲明爲常量。

let outgoingBubble = JSQMessagesBubbleImageFactory().outgoingMessagesBubbleImageWithColor(UIColor(red: 0.07, green: 0.44, blue: 0.62, alpha: 1.0)) 
let incomingBubble = JSQMessagesBubbleImageFactory().incomingMessagesBubbleImageWithColor(UIColor(red: 0.87, green: 0.87, blue: 0.90, alpha: 1.0)) 

或者您可以在委託方法內自定義它們。

+0

outgoingBubble和incomingBubble是全局設置,我希望只是在委託實現中更改單個泡泡。我認爲這行可以改變氣泡self.incomingBubble.messageBubbleImage.jsq_imageMaskedWithColor(UIColor(red:119/255,green:204/255,blue:250/255,alpha:1.0)) – Neil

+0

您需要返回一個單獨一個,而不是修改全局的 – bolnad

+0

這樣做的竅門,謝謝。編輯我的代碼,使其工作。 – Neil