如何在tableViewCell中运行imagePicker

时间:2015-12-05 05:09:02

标签: ios swift uitableview uiimagepickercontroller

我有一个带有单元格的tableView。在这个单元格中,我有一个imageView和一个覆盖它的按钮。该按钮具有IBAction。点击时,该按钮应该召唤imagePicker。 IBAction代码位于单元子视图中。

@IBAction func MyStatusImageButtonAction(sender: AnyObject) {
    // Select Image
    let imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    imagePicker.allowsEditing = false
    self.presentViewController(imagePicker, animated: true, completion: nil)

由于这条线,我收到了错误。

self.presentViewController(imagePicker, animated: true, completion: nil)

错误说“类型的值”myCell“没有成员”presentViewController“。

我是否应该在托管单元格的viewController中加载imagePicker,然后以某种方式将其传输到单元格?我应该用不同的代码在单元格中加载imagePicker吗?我是不是错了?

为清楚起见,我的目标是让用户加载此TableViewController,并且只能将图像分配给此单元格中的imageView。

谢谢。

4 个答案:

答案 0 :(得分:5)

编写协议,TableViewController将为您显示。

{105,100,95,90,85,80,75,70,65,60} {105,95,85,75,65}

在您的手机中

protocol ImagePickerDelegate {

    func pickImage()
}

在你的tableViewController

var delegate : ImagePickerDelegate?

@IBAction func pickImage(sender: AnyObject) {

    delegate?.pickImage()
}

希望这有帮助。

答案 1 :(得分:1)

只有viewController可以展示另一个viewController。所以使用:

self.view.presentViewController(imagePicker, animated: true, completion: nil)

答案 2 :(得分:0)

我在这里找到了一个非常全面的分步回答

https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson6.html#//apple_ref/doc/uid/TP40015214-CH20-SW1

从"定义您的数据模型"。

基本上发生的事情是您在Swift文件中定义数据。然后在ViewController中将照片设置为等于ImageView。然后仍然在ViewController代码中,将新定义的照片指向您的单元格。我一直在解决这个问题。提供的链接非常全面。

答案 3 :(得分:0)

只需跟进@truongky的帖子,并为Swift 5更新语法即可。

正如他正确指出的那样,首先创建一个协议。您可以为协议创建一个扩展名为的新文件。然后插入OP标识的代码:

protocol ImagePickerDelegate {
    func pickImage() 
}


然后,在您的TableViewController中:

func pickImage() {
    let imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary
    imagePicker.allowsEditing = false
    self.present(imagePicker, animated: true, completion: nil)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
        let cell:ImageCell = tableView.cellForRow(at: IndexPath(row: 0, section: 0)) as! ImageCell
        cell.customImage.image = image
    }

    picker.dismiss(animated: true, completion: nil)
}


此外,您可以修改自定义单元格以响应点击手势识别器,如下所示:

var delegate : ImagePickerDelegate?

@IBOutlet weak var customImage: UIImageView!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code

    addTapGestureRecognizer(for: customImage)
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

func addTapGestureRecognizer(for view: UIImageView) {
    let tap = UITapGestureRecognizer(target: self, action: #selector(pickImage))
    tap.numberOfTapsRequired = 1
    view.isUserInteractionEnabled = true
    view.addGestureRecognizer(tap)
}

@objc func pickImage() {
    delegate?.pickImage()
}


希望这会有所帮助。

荣誉〜