Не могу обновить аватар в tableview + uiimagepickerController - PullRequest
0 голосов
/ 02 октября 2019

У меня есть tableViewcell с imageView для аватара, и я использую TapGestureRecognizer в моем viewController для изменения аватара, но после того, как я выбрал фотографию, мой аватар все еще без фотографии. Просто белый. Может быть, я должен что-то перезагрузить?

У меня есть ячейка с imageView, и я использую TapGestureRecognizer в моем viewController для изменения аватара, но после того, как я выбрал фотографию, мой аватар все еще без фотографии. Просто белый. может мне что-то перезагрузить?

Image of viewcontroller

extension BarberSettingsViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        var selectedImageFromPicker: UIImage?
        if let editedImage = info[.editedImage] as? UIImage  {
            selectedImageFromPicker = editedImage
            picker.dismiss(animated: true, completion: nil)
        } else {
            let originalImage = info[.originalImage] as! UIImage
            selectedImageFromPicker = originalImage
            picker.dismiss(animated: true, completion: nil)
        }

        if let selectedImage = selectedImageFromPicker {
            let cell = tableView.dequeueReusableCell(withIdentifier: UserAvatarCell.name) as! UserAvatarCell
            cell.avatarImageView.image = selectedImage
        }
    }


    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }
}

Ответы [ 3 ]

0 голосов
/ 02 октября 2019

Объявите этот код над viewdidLoad ()

var img: UIImage? {didSet {

        tableView.reloadData()
    }
}

Затем добавьте эту строку в cellForRow Метод представления таблицы

cell.imageView.Image = img

И измените эту функцию

func imagePickerController (_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {var selectedImageFromPicker: UIImage? если пусть editedImage = info [.editedImage] как? UIImage {selectedImageFromPicker = editedImage picker.dismiss (animated: true, extension: nil)} else {пусть originalImage = info [.originalImage] as! UIImage selectedImageFromPicker = originalImage picker.dismiss (анимированный: true, завершение: nil)}

    if let selectedImage = selectedImageFromPicker {
        img = selectedImage

    }
}
0 голосов
/ 02 октября 2019

Я думаю, что ваша проблема в этой части

if let selectedImage = selectedImageFromPicker {
        let cell = tableView.dequeueReusableCell(withIdentifier: UserAvatarCell.name) as! UserAvatarCell 
        // this is an empty cell, 
        cell.avatarImageView.image = selectedImage
    }

Вы должны получить ячейку из представленного представления таблицы с индексом ячейки, ваш код создать новую ячейку, но вы должны добавить аватар в представленную ячейку

let cell = tableView.cellForRowAtIndexPath(indexPath) as! UserAvatarCell

cell.avatarImageView.image = selectedImage
0 голосов
/ 02 октября 2019

Пожалуйста, перезагрузите табличное представление после установленного изображения в ячейке

tableview.reloadData ()

Если есть несколько разделов, то вы перезагрузите этот конкретный раздел или строку табличного представления таблицы.

...