Проблемы с изображениями сообщений в моем "приложении обмена сообщениями"

Я пытаюсь сделать приложение, похожее на "Messaging App". Вы можете отправлять и получать сообщения (есть текстовые сообщения и сообщения с изображениями). Проблема в том, что когда я отправляю изображение, это нормально, но когда я отправляю другое, оба изображения становятся равными последнему, которое я отправил.

Основным контроллером (где находятся сообщения) является CollectionViewController, и он имеет класс "ChatMessageCell".

Я поставил код ниже. Я надеюсь, что вы можете помочь мне... спасибо!

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 ответ

Решение

В вашем setupCell метод, вы устанавливаете imageView для хранения изображения в переменной imagenSeleccionada, Таким образом, чтобы решить вашу проблему, используйте это, чтобы заменить ваш 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
        }

    }

}
Другие вопросы по тегам