UIImagePickerControllerDelegate使用NSObject类时不调用的方法?

时间:2017-11-06 05:36:35

标签: ios swift uiimagepickercontroller

我目前有一个NSObject类,其中我创建了一个UIImagePickerController对象。在这个课程中,我有2个函数,将sourceType设置为一个函数中的摄像头,将sourceType设置为其他函数中的照片库。

我使用UIImagePickerController类中的协议呈现UIViewController对象。

class ImagePickerManager: NSObject
{
    let picker = UIImagePickerController()
    var imagePickerDelegate: ImagePickerProtocol!

    override init()
    {
        super.init()

        picker.delegate = self
    }

    func cameraPicker()
    {
        picker.sourceType = .camera
        picker.cameraCaptureMode = .photo

        imagePickerDelegate.presentImagePicker(picker: picker)
    }

    func photoLibraryPicker()
    {
        picker.sourceType = .photoLibrary

        imagePickerDelegate.presentImagePicker(picker: picker)
    }
}



extension OtherViewController: ImagePickerProtocol
{
    func presentImagePicker(picker: UIImagePickerController)
    {
        self.present(picker, animated: true, completion: nil)
    }
}

class OtherViewController: UIViewController
{
    ...

    @IBAction func addPhoto(_ sender: UIButton)
    {
        let alert = CustomAlertController(title: nil, message: "Aimage", style: .actionSheet)

        alert.addAction(AlertAction(title: "Camera", style: .ok) { action in
            let imagePickerManager = ImagePickerManager()
            imagePickerManager.imagePickerDelegate = self
            imagePickerManager.cameraPicker()
        })

        alert.addAction(AlertAction(title: "Photo Library", style: .ok) { action in
            let imagePickerManager = ImagePickerManager()
            imagePickerManager.imagePickerDelegate = self
            imagePickerManager.photoLibraryPicker()
        })

        alert.addAction(AlertAction(title: "Cancel", style: .cancel))

        present(alert, animated: true, completion: nil)
    }
}

我的ImagePickerManager类符合UIImagePickerControllerDelegate和UINavigationControllerDelegate:

extension ImagePickerManager: UIImagePickerControllerDelegate
{
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
    {
        print("imagePickerController")
        if let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
        {
            print("SELECTED IMAGE")

        }

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

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

extension ImagePickerManager: UINavigationControllerDelegate
{

}

但是,NSObject类从不调用任何委托方法。

我看过类似的问题:

  1. Why doesn't UIImagePickerController delegate to my Object class?

  2. UIImagePickerControllerDelegate Methods Not Called When Delegate Not UIViewController

  3. swift : UIPickerViewController delegates not called after Class-Extraction

  4. 但是我无法从上述问题中解决我的问题。

    有人能指出我做错了吗?

    谢谢!

0 个答案:

没有答案