У меня есть UITableViewCell, который показывает изображение или текст.Я установил для UIImageView высоту и ширину <= 150, чтобы это не влияло на высоту ячейки, если изображение отсутствует, но текст есть.(это приложение для обмена сообщениями) </p>
Теперь моя проблема в том, что в ячейке не отображается изображение после загрузки, и пользователю необходимо вернуться назад и снова просмотреть этот экран, чтобы увидеть изображение.Как мне решить эту проблему?
Перед загрузкой изображения:
После изображенияуспешно загружен:
как вы можете видеть, он не показывает, только представление было расширено
Если пользователь нажимает кнопку НАЗАД и снова появляется в этом виде,
изображение теперь отображается.
как мне решить эту проблему?потому что я не могу написать tableview.reloaddata()
в tableviewcell.
для моего кода в tableviewcell для настройки моей ячейки:
func configCell(message: Message) {
self.message = message
if message.fromId == currentUser {
sentView.isHidden = false
sentMsgLabel.text = message.textMessages
receivedMsgLabel.text = ""
receivedView.isHidden = true
timeReceived.text = ""
timeSent.text = message.timestamp
youLabel.text = "You"
themLabel.text = ""
if let ImageUrl = message.imageUrlLink {
self.receivedimg.loadImageUsingCacheWithUrlString(ImageUrl)
}
}
else {
sentView.isHidden = true
sentMsgLabel.text = ""
receivedMsgLabel.text = message.textMessages
receivedMsgLabel.isHidden = false
timeReceived.text = message.timestamp
timeSent.text = ""
// setting name for receipient
Database.database().reference().child("users").child(message.fromId!).child("name").observe(.value) { (datasnapshot) in
if let name = datasnapshot.value as? String {
self.themLabel.text = name
}
}
youLabel.text = ""
}
}
для моего loadImageUsingCacheWithUrlString кода будет расширением, как показано ниже:
let imageCache = NSCache<AnyObject, AnyObject>()
extension UIImageView {
func loadImageUsingCacheWithUrlString(_ urlString: String) {
self.image = nil
//check cache for image first
if let cachedImage = imageCache.object(forKey: urlString as AnyObject) as? UIImage {
self.image = cachedImage
return
}
//otherwise fire off a new download
let url = URL(string: urlString)
URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
//download hit an error so lets return out
if error != nil {
print(error ?? "")
return
}
DispatchQueue.main.async(execute: {
if let downloadedImage = UIImage(data: data!) {
imageCache.setObject(downloadedImage, forKey: urlString as AnyObject)
self.image = downloadedImage
}
})
}).resume()
}
}