【问题标题】:Trouble with images messages in my "Messaging App"我的“消息应用程序”中的图像消息出现问题
【发布时间】:2017-06-29 16:42:47
【问题描述】:

我正在尝试制作一个类似于“消息传递应用程序”的应用程序。您可以发送和接收消息(有文本消息和图像消息)。问题是,当我发送一张图片时,它没问题,但是当我发送另一张图片时,两张图片都变成了我发送的最后一张。

主控制器(消息所在的位置)是一个 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?

}

【问题讨论】:

    标签: swift image chat messages


    【解决方案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
            }
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多