使用 UIImagePickerController 更改自定义单元格的图像

Change image of custom cell with UIImagePickerController

我创建了一个自定义单元格,其中包含 imageView。我想在 UIImagePickerController 的帮助下更改 imageViewimage。当我在模拟器中检查这个函数时,它并没有改变任何东西。想不通问题

自定义单元格的属性:

let imageOfPlace: UIImageView = {
    let iv = UIImageView()
    return iv
}()

tableView中的单元格:

let cell = tableView.dequeueReusableCell(withIdentifier: "cell")!
        if indexPath.row == 0 {
        let cell = tableView.dequeueReusableCell(withIdentifier: ImageOfPlaceViewCell.identifierOfImageOfPlaceCell) as! ImageOfPlaceViewCell

选择器的功能:

func chooseImagePickerController(source: UIImagePickerController.SourceType) {
    if UIImagePickerController.isSourceTypeAvailable(source) {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.allowsEditing = true
        imagePicker.sourceType = source
        present(imagePicker, animated: true)
    }
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    let myCell = ImageOfPlaceViewCell()
    myCell.imageOfPlace.image = info[.editedImage] as! UIImage
    picker.dismiss(animated: true)
}

您正在此处创建一个新单元格:

let myCell = ImageOfPlaceViewCell()

相反,您需要更改现有单元格的图像。您需要从 table 中获取现有的单元格对象。为此,您可以使用 tableView.cellForRow,并将行的索引路径传递给那里。

我不确定你的 table 结构,但你还需要确保当你重新加载你的 table 它不会消失,所以你可以将选择的图像存储在其他地方下次在 cellForRowAt.

中使用
var pickedImage: UIImage?

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.row == 0 {
        let cell = tableView.dequeueReusableCell(withIdentifier: ImageOfPlaceViewCell.identifierOfImageOfPlaceCell) as! ImageOfPlaceViewCell
        cell.imageOfPlace.image = pickedImage
    }
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
    let image = info[.editedImage] as! UIImage
    pickedImage = image

    let myCell = tableView.cellForRow(at: IndexPath(row: 0, section: 0))

    myCell?.imageOfPlace.image = info[.editedImage] as! UIImage

    picker.dismiss(animated: true)
}

p.s。另外我不确定你的 if 之前的 let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! 是什么,它可能是多余的(至少在你 return 来自那个 if 的单元格的情况下)