I currently have an NSObject class of which I've created a UIImagePickerController object. In this class I have 2 functions that sets the sourceType to be the camera in one function and the sourceType to be the photo library in the other functions.
I present the UIImagePickerController object using a protocol in a UIViewController class.
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)
}
}
My ImagePickerManager class conforms to the UIImagePickerControllerDelegate and 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
{
}
However, the NSObject class never calls any of the delegate methods.
I've looked at similar problems:
Why doesn't UIImagePickerController delegate to my Object class?
UIImagePickerControllerDelegate Methods Not Called When Delegate Not UIViewController
swift : UIPickerViewController delegates not called after Class-Extraction
However I couldn't resolve my issue from the above questions.
Can someone point me to what I'm doing wrong?
Thanks!