"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?

}

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
        }
    }
}

相关内容

最新更新