gpt4 book ai didi

ios - 从特定 UITableViewCell 启动相机后更新特定 UITableViewCell 上的图像

转载 作者:行者123 更新时间:2023-11-28 06:12:53 26 4
gpt4 key购买 nike

我有一个UITableView,每个单元格都包含一个UIImageView 和一个UIButton。点击按钮后我启动相机,我正在尝试更新该单元格索引路径中的 UIImageView 。到目前为止,这是我尝试过的方法,但图像没有更新:

import UIKit

class ViewController: UIViewController, UITableViewDelegate,
UITableViewDataSource, UIImagePickerControllerDelegate,
UINavigationControllerDelegate {

var objects = ["cup", "phone", "shoe", "tv"]
var images = [UIImage?](repeating:nil, count: 4)
var imageTaken : UIImage!
var imagePicker : UIImagePickerController?
@IBOutlet weak var tableView: UITableView!

@IBAction func TakePhoto(_ sender: UIButton) {
imagePicker!.sourceType = .camera
present(imagePicker!, animated: true, completion: nil)
images[sender.tag] = imageTaken
self.tableView.reloadData()

}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return objects.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = Bundle.main.loadNibNamed("CustomTableViewCell", owner: self, options: nil)?.first as! CustomTableViewCell

cell.buttonOutlet.tag = indexPath.row

cell.buttonOutlet.addTarget(self, action: #selector(ViewController.TakePhoto(_:)), for: .touchUpInside)

cell.imageFound.image = images[indexPath.row]

return cell
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {

self.imageTaken = pickedImage

}
dismiss(animated: true, completion: nil)

}

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

imagePicker = UIImagePickerController()
imagePicker?.delegate = self
}

最佳答案

不是将 self.imageTaken 定义为 UIImage,而是需要在 UIImagePickerController 出现时保持对 indexPath.row 的引用,并且在 didFinishPickingMediaWithInfo 方法然后根据 indexPath.row

将图像传递到图像数组中

像这样

import UIKit

class ViewController: UIViewController, UITableViewDelegate,
UITableViewDataSource, UIImagePickerControllerDelegate,
UINavigationControllerDelegate {

var objects = ["cup", "phone", "shoe", "tv"]
var images = [UIImage?](repeating:nil, count: 4)
var currentRow : Int = -1
var imagePicker : UIImagePickerController?
@IBOutlet weak var tableView: UITableView!

@IBAction func TakePhoto(_ sender: UIButton) {
imagePicker!.sourceType = .camera
self.currentRow = sender.tag
present(imagePicker!, animated: true, completion: nil)
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return objects.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = Bundle.main.loadNibNamed("CustomTableViewCell", owner: self, options: nil)?.first as! CustomTableViewCell

cell.buttonOutlet.tag = indexPath.row

cell.buttonOutlet.addTarget(self, action: #selector(ViewController.TakePhoto(_:)), for: .touchUpInside)

cell.imageFound.image = images[indexPath.row]

return cell
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
guard self.currentRow != -1 else{
return
}

images[self.currentRow] = pickedImage
self.currentRow = -1
self.tableView.reloadData()
}
dismiss(animated: true, completion: nil)

}

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

imagePicker = UIImagePickerController()
imagePicker?.delegate = self
}
}

关于ios - 从特定 UITableViewCell 启动相机后更新特定 UITableViewCell 上的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46010382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com