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?
}
Ja, das funktioniert gut zu ersetzen !!! Danke!!! – Edwjonn