使用 Swift 在 UIView 类中实现 imagePicker



我正在尝试在现有的UIView类中实现imagePicker。看起来你只被允许在ViewController类中实现UIImagePickerController。

在实现 imagePicker 控制器时,我在编译之前收到"使用未解析的标识符'关闭'"错误。

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

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

我这样做的原因是我从使用 UIVIew 类的 UIViewController 类实现了滚动视图。这些都是 xib 文件包含的类。

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

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

来自 UIView 类的错误

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)
}

这对我来说非常好:

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)
}

真正的答案可能是稍微改变一下结构,但对于简单的事情,直到你学到足够的东西来做到这一点。

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

picker.presentingViewController.dismiss( ....

应该工作。

或者,您最初是如何呈现选择器的? 该UIViewController是您通常会将其称为解雇的那个。

在主视图控制器中创建 imagePicker,选择图像后,您可以在 coustom 视图中设置图像,方法是创建一个在 coustom 视图中设置图像的方法,并在视图控制器中使用所选图像调用该方法,这最终将为您提供所需的功能

class CoustomView : UIView{
@IBoutlet weak var ImageView1 : UIImageView
init(coder : NSCoder){ 
super.init(coder : coder)
}
func setImages(image : UIImage){

ImageView1.image = image
}
}

class mainController : UIViewController{
@IBoutlet weak var viewToBeSet : CoustomView!
viewDidLoad(){
// select the image using UIImagePicker and store in a variable then
// call the method of coustom view with stored image in argument to show 
// the image in your view 

viewToBeSet.setImage(image : selectedImage)
}
}

最新更新