2017-06-29 3 views
0

「メッセージングアプリケーション」のようなアプリケーションを作ろうとしています。メッセージを送受信できます(テキストメッセージとイメージメッセージがあります)。問題は、画像を送信するとOKですが、別の画像を送信すると、両方の画像が最後に送信した画像と同じになります。「メッセージングアプリケーション」の画像メッセージに関する問題

(メッセージがある)メインコントローラはCollectionViewControllerであり、 "ChatMessageCell"クラスを持っています。

コードを入力します。あなたが私を助けてくれることを願って...ありがとう!あなたのsetupCell方法で

var messages = [Message]() 

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! ChatMessageCell 

    let message = messages[indexPath.item] 
    cell.textView.text = message.text 


    setupCell(cell, message: message) 

    if let text = message.text { 
     //a text message 
     cell.bubbleWidthAnchor?.constant = estimateFrameForText(text).width + 32 
     cell.textView.isHidden = false 

    } else if message.text == nil { 
     //fall in here if its an image message 
     cell.bubbleWidthAnchor?.constant = 200 
     cell.textView.isHidden = true 
    } 

    return cell 
} 


fileprivate func setupCell(_ cell: ChatMessageCell, message: Message) { 

    if message.id == 1 { 
     //outgoing blue 

     cell.bubbleViewRightAnchor?.isActive = true 
     cell.bubbleViewLeftAnchor?.isActive = false 

     if message.text != nil { 
      //text message 
      cell.bubbleView.backgroundColor = ChatMessageCell.blueColor 
      cell.textView.textColor = UIColor.white 
      cell.messageImageView.isHidden = true 

     } else { 
      //image message 
      cell.messageImageView.image = imagenSeleccionada 
      cell.messageImageView.isHidden = false 
      cell.bubbleView.backgroundColor = UIColor.clear 
     } 


    } else if message.id == 2 { 
     //incoming gray 

     cell.bubbleViewRightAnchor?.isActive = false 
     cell.bubbleViewLeftAnchor?.isActive = true 

     if message.text != nil { 
      //mensaje de texto 
      cell.bubbleView.backgroundColor = UIColor(red: 240/255, green: 240/255, blue: 240/255, alpha: 1.0) 
      cell.textView.textColor = UIColor.black 
      cell.messageImageView.isHidden = true 

     } else { 
      //mensaje de imagen 
      cell.messageImageView.image = imagenSeleccionada 
      cell.messageImageView.isHidden = false 
      cell.bubbleView.backgroundColor = UIColor.clear 
     } 

    } 

} 

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 

    var message: Message? 

    if swiche.isOn == true { 

     message = Message(text: self.inputTextField.text, id: 1, imagen: nil, imageHeight: nil, imageWidth: nil) 

    } else { 

     message = Message(text: self.inputTextField.text, id: 2, imagen: nil, imageHeight: nil, imageWidth: nil) 
    } 

    messages.append(message!) 
    self.inputTextField.text = nil 
    collectionView?.reloadData() 
    return true 
} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

    //we selected an image 
    handleImageSelectedForInfo(info as [String : AnyObject]) 


    dismiss(animated: true, completion: nil) 
} 


private func handleImageSelectedForInfo(_ info: [String: AnyObject]) { 

    var selectedImageFromPicker: UIImage? 

    if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage { 
     selectedImageFromPicker = editedImage 

    } else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage { 

     selectedImageFromPicker = originalImage 
    } 

    if let selectedImage = selectedImageFromPicker { 

     imagenSeleccionada = selectedImage 
    } 


    var message: Message? 

    if swiche.isOn == true { 
     //azul 
     message = Message(text: nil, id: 1, imagen: imagenSeleccionada, imageHeight: imagenSeleccionada?.size.height as NSNumber?, imageWidth: imagenSeleccionada?.size.width as NSNumber?) 

    } else { 

     message = Message(text: nil, id: 2, imagen: imagenSeleccionada, imageHeight: imagenSeleccionada?.size.height as NSNumber?, imageWidth: imagenSeleccionada?.size.width as NSNumber?) 
    } 

    messages.append(message!) 
    collectionView?.reloadData() 

} 

(タイプNSObjectのの) "メッセージ" クラス

struct Message { 

var text: String? 

//1 = blue ; 2 = gris 
var id: NSNumber? 
var imagen: UIImage? 

var imageHeight: NSNumber? 
var imageWidth: NSNumber? 

}

答えて

1

、あなたは変数imagenSeleccionadaに格納されている画像を持っているImageViewのを設定しています。あなたの問題を解決するには、setupCellメソッドを置き換えて使用してください。

func setupCell(_ cell: ChatMessageCell, message: Message) { 

    if message.id == 1 { 
     //outgoing blue 

     cell.bubbleViewRightAnchor?.isActive = true 
     cell.bubbleViewLeftAnchor?.isActive = false 

     if message.text != nil { 
      //text message 
      cell.bubbleView.backgroundColor = ChatMessageCell.blueColor 
      cell.textView.textColor = UIColor.white 
      cell.messageImageView.isHidden = true 

     } else { 
      //image message 
      cell.messageImageView.image = Message.imagen 
      cell.messageImageView.isHidden = false 
      cell.bubbleView.backgroundColor = UIColor.clear 
     } 


    } else if message.id == 2 { 
     //incoming gray 

     cell.bubbleViewRightAnchor?.isActive = false 
     cell.bubbleViewLeftAnchor?.isActive = true 

     if message.text != nil { 
      //mensaje de texto 
      cell.bubbleView.backgroundColor = UIColor(red: 240/255, green: 240/255, blue: 240/255, alpha: 1.0) 
      cell.textView.textColor = UIColor.black 
      cell.messageImageView.isHidden = true 

     } else { 
      //mensaje de imagen 
      cell.messageImageView.image = Message.imagen 
      cell.messageImageView.isHidden = false 
      cell.bubbleView.backgroundColor = UIColor.clear 
     } 

    } 

} 
+0

ええ、それはうまく動作します!ありがとうございました!!! – Edwjonn

関連する問題