2017-06-29 4 views
0

Ich versuche, eine App wie eine "Messaging App" zu machen. Sie können Nachrichten senden und empfangen (es gibt Textnachrichten und Bildnachrichten). Das Problem ist, dass wenn ich ein Bild sende, es in Ordnung ist, aber wenn ich ein anderes sende, werden beide Bilder gleich der letzten, die ich gesendet habe.Probleme mit Bildern Nachrichten in meiner "Messaging App"

Der Hauptcontroller (wo die Nachrichten sind) ist ein CollectionViewController, und es hat eine "ChatMessageCell" -Klasse.

Ich bin den Code nach unten setzen. Ich hoffe du kannst mir helfen ... danke!

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() 

} 

Die "Message" Klasse (vom Typ NSObject)

struct Message { 

var text: String? 

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

var imageHeight: NSNumber? 
var imageWidth: NSNumber? 

}

Antwort

1

In Ihrer setupCell Methode, Sie setzen das Bild in Imageview Variable imagenSeleccionada gespeichert zu haben. Also, um Ihr Problem zu lösen, verwenden Sie dies, um Ihre setupCell Methode

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

Ja, das funktioniert gut zu ersetzen !!! Danke!!! – Edwjonn

Verwandte Themen