【问题标题】:Implement imagePicker in UIView class using Swift使用 Swift 在 UIView 类中实现 imagePicker
【发布时间】:2018-04-15 20:59:43
【问题描述】:

我正在尝试在我现有的 UIView 类中实现一个 imagePicker。看起来你只能在 ViewController 类中实现 UIImagePickerController。

在实现 imagePicker 控制器时,我在编译前收到“Use of unresolved identifier 'dismiss'”错误。

我已经探索了几种从 UIView 类中调用 imagePicker 的方法,但没有成功。

我探索的一个选项是: 在 UIViewController 类型的 UIView 类中声明了一个变量(从其填充 UIView 类的父 UIViewController 类)。这导致每次我想添加图像时都会再次启动 UIViewController 类,这不是我想要的

我这样做的原因是我已经从使用 UIVIew 类的 UIViewController 类中实现了一个滚动视图。这些都是 xib 文件实现的类。

有没有人尝试过这样的事情或有更好的/可行的方法来实现我需要的东西?

请参阅下面的错误示例和一些代码示例:

Error from UIView Class

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

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage
    self.imageView.image = selectedImage
    dismiss(animated: true, completion: nil)
}

【问题讨论】:

  • 请不要在图片中放代码---将代码块复制到问题中
  • 谢谢。更新了我的帖子。
  • huntlogEditVC 是如何获得它的价值的?为什么不在第二个函数中使用它

标签: ios swift uiview uiviewcontroller swift4


【解决方案1】:

这对我来说非常好:

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    if let uierPickedInfo = info[UIImagePickerControllerOriginalImage]as? UIImage {

        guard CIImage(image: userPickedInfo) != nil else {
            fatalError("Cannot convert")
        }
        imageView.image = userPickedInfo
    }
    imagePicker.dismiss(animated: true, completion: nil)
}

【讨论】:

  • 确实可以在 imagePicker 上调用dismiss,但这不是正确的方法。碰巧 iOS 会为您将其转发给正确的 VC。
【解决方案2】:

真正的答案可能是稍微改变一下结构,但要简单一些,直到你学得足够多。

UIImagePickerController 是一个UIViewController,它有一个名为presentingViewController 的属性,它是呈现选择器的视图控制器,所以...

picker.presentingViewController.dismiss( ....

应该可以。

或者——你最初是如何展示选择器的? UIViewController 是你通常会调用的那个。

【讨论】:

  • 我在 UIViewController 类上实现了一个滚动视图,该类动态填充 UIView 类。我的相机和图库需要从此 UIView 访问。我试过实现你的代码,它不再给我一个致命错误,但它也没有打开相机。我是否采取了完全错误的方法?
  • dismiss 关闭相机,所以我不太明白。做自己想做的事情并非不可能,但您需要访问 VC 才能展示和解雇其他 VC。
猜你喜欢
  • 2021-08-06
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
相关资源
最近更新 更多