使用 UIImagePickerController 更改自定义单元格的图像
Change image of custom cell with UIImagePickerController
我创建了一个自定义单元格,其中包含 imageView
。我想在 UIImagePickerController
的帮助下更改 imageView
的 image
。当我在模拟器中检查这个函数时,它并没有改变任何东西。想不通问题
自定义单元格的属性:
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
的单元格的情况下)
我创建了一个自定义单元格,其中包含 imageView
。我想在 UIImagePickerController
的帮助下更改 imageView
的 image
。当我在模拟器中检查这个函数时,它并没有改变任何东西。想不通问题
自定义单元格的属性:
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
的单元格的情况下)