首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在tableViewCell中运行imagePicker

如何在tableViewCell中运行imagePicker
EN

Stack Overflow用户
提问于 2015-12-05 13:09:02
回答 4查看 3.2K关注 0票数 4

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

代码语言:javascript
复制
@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)

因为这一行,我得到了一个错误。

代码语言:javascript
复制
self.presentViewController(imagePicker, animated: true, completion: nil)

错误说明"myCell“类型的"Value”没有成员"presentViewController“。

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

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

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2015-12-05 16:24:26

编写一个协议,您的TableViewController将为您显示它。

代码语言:javascript
复制
protocol ImagePickerDelegate {

    func pickImage()
}

在你的牢房里

代码语言:javascript
复制
var delegate : ImagePickerDelegate?

@IBAction func pickImage(sender: AnyObject) {

    delegate?.pickImage()
}

在你的tableViewController中

代码语言:javascript
复制
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("displayImage", forIndexPath: indexPath) as! ImageTableViewCell

    cell.delegate = self

    return cell
}

func pickImage() {

    let imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    imagePicker.allowsEditing = false
    self.presentViewController(imagePicker, animated: true, completion: nil)
}

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {

    dismissViewControllerAnimated(true, completion: nil)

    var cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0)) as! ImageTableViewCell
    cell.displayImageView.image = image
}

希望这能有所帮助。

票数 5
EN

Stack Overflow用户

发布于 2015-12-05 14:39:23

只有一个viewController才能呈现另一个viewController。所以使用:

代码语言:javascript
复制
self.view.presentViewController(imagePicker, animated: true, completion: nil)
票数 1
EN

Stack Overflow用户

发布于 2019-08-24 00:18:40

只是@truongky关于Swift 5语法更新的帖子的后续文章。

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

代码语言:javascript
复制
protocol ImagePickerDelegate {
    func pickImage() 
}

然后,在您的TableViewController中:

代码语言:javascript
复制
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)
}

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

代码语言:javascript
复制
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()
}

希望这能有所帮助。

功劳~

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34101524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档