У меня есть класс, где я вызываю UIImagePickerController
, чтобы выбрать изображение и вернуть его, чтобы я мог использовать его где-то еще в моем коде.UIImagePickerControllerDelegate функции не называются
Теперь я устанавливаю делегат и реализую необходимую мне необходимую функцию, но функции делегата не вызываются.
Часть моего кода, который имеет вопрос:
import UIKit
typealias PhotoTakingHelperCallback = (UIImage? -> Void)
class PhotoTakingHelper: NSObject
{
weak var viewController:UIViewController!
var callback: PhotoTakingHelperCallback
var imagePickerController: UIImagePickerController?
init(viewController:UIViewController , callback:PhotoTakingHelperCallback) {
self.viewController = viewController
self.callback = callback
super.init()
showPhotoSourceSelection()
}
func showPhotoSourceSelection() {
let alertController = UIAlertController(title: nil, message: "Where do you want to get your picture from?", preferredStyle: .ActionSheet)
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
alertController.addAction(cancelAction)
let photoLibraryAction = UIAlertAction(title: "Photo from Library", style: .Default) { (action) -> Void in
self.showImagePickerController(.PhotoLibrary)
}
alertController.addAction(photoLibraryAction)
if (UIImagePickerController.isCameraDeviceAvailable(.Rear)) {
let cameraAction = UIAlertAction(title: "Photo from Camera", style: .Default, handler: { (action) -> Void in
self.showImagePickerController(.Camera)
})
alertController.addAction(cameraAction)
}
viewController.presentViewController(alertController, animated: true, completion: nil)
}
func showImagePickerController(sourceType: UIImagePickerControllerSourceType) {
imagePickerController = UIImagePickerController()
imagePickerController!.delegate = self
imagePickerController!.sourceType = sourceType
print("Set the delegate \(imagePickerController?.delegate?.isMemberOfClass(PhotoTakingHelper))")
self.viewController.presentViewController(imagePickerController!, animated: true, completion: nil)
}
}
extension PhotoTakingHelper: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
print("HELLO?")
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
viewController.dismissViewControllerAnimated(false, completion: nil)
print("calling the callback now ")
callback(image)
print("Finished calling the callback")
}
}
Я проверил iPhone: UIImagePickerControllerDelegate methods not Invoked? и a similar problem и многое другое, но никто из них не решен вопрос.
Я понял, что ни один из методов делегата не вызывается, когда я запускаю программу на симуляторе и выбираю изображение в библиотеке фотографий, только консоль печатает.
Установите делегат Опционно (правда)
Я думаю, что ваш imagePickerController отпущен до вызова метода делегата ... просто попытаться сделать его глобальным. ..Я имею в виду объявить как свойство –
да, но я не имею его в образце кода, плохо добавьте его сейчас, чтобы предотвратить путаницу – stringRay2014