2016-04-03 124 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