web-dev-qa-db-fra.com

didFinishPickingMediaWithInfo NON appelé Swift

J'ai un bouton UITableViewCell pour prendre une image et la replacer dans la cellule. Lorsque j'appelle UIImagePickerController et que je prends l'image, il n'appelle pas le délégué suivant.

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject], sender:AnyObject)

Ceci est mon takePhotoFunction dans le UITableViewController:

@IBAction func takePhoto(sender: AnyObject) {
let imagePickerController = UIImagePickerController()
imagePickerController.delegate = self
imagePickerController.allowsEditing = true

let actionSheet = UIAlertController(title: "Choose image souruce", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)

actionSheet.addAction(UIAlertAction(title: "Take Image", style: UIAlertActionStyle.Default, handler: { (alert:UIAlertAction!) -> Void in
    imagePickerController.sourceType = UIImagePickerControllerSourceType.Camera
    self.presentViewController(imagePickerController, animated: true, completion: nil)
}))

actionSheet.addAction(UIAlertAction(title: "Photo Library", style: UIAlertActionStyle.Default, handler: { (alert:UIAlertAction!) -> Void in
    imagePickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    self.presentViewController(imagePickerController, animated: true, completion: nil)
}))
actionSheet.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))
self.presentViewController(actionSheet, animated: true, completion: nil)}
16
Tal Zion

Dans Swift 3 , cette méthode de délégation s'appelle maintenant:

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

Les différences sont:

  1. Il y a un souligné _ avant le sélecteur
  2. le type d'information à la fin est changé de [String: AnyObject] en [String: Any]

J'avais le même problème et lorsque j'ai apporté ces modifications, cela a fonctionné.

39
JPetric

1. N'oubliez pas d'ajouter UIImagePickerControllerDelegate,UINavigationControllerDelegate
2. Dans votre viewDidLoad(), ajoutez picker.delegate = self
3. Ajouter les méthodes de délégué

public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
        userImageView.contentMode = .scaleAspectFit
        userImageView.image = chosenImage
        dismiss(animated:true, completion: nil)
    }

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

J'espère que ça aide :)

13
Vinu David Jose

Pour Swift 4.2

Cette méthode a été renommée et devrait maintenant être appelée comme ci-dessous. J'ai eu le même problème que cette méthode de délégué n'appelait pas, mais après cela, mon problème a été résolu.

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

}
2
Noshaid Ali

Pour Swift 4.2

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
   if let chosenImage = info[.originalImage] as? UIImage{
        //use image
    }
}
2
atul Pol

Utilisez la méthode ci-dessous pour Swift 4.2:

public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]){
}
2
Nupur Sharma

pour Swift 4.2

J'ai eu un problème similaire lorsque les méthodes de délégation n'étaient pas appelées par programme. 

Le imagePicker.delegate = self devrait êtrePASdans la méthode viewDidLoad () mais dans la méthode qui ouvre la galerie. Comme ça:

func openGallery()
    {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self

        imagePicker.sourceType = .photoLibrary

        self.present(imagePicker, animated: true, completion: nil)
   }
1
Almazini

La méthode déléguée s'appelle maintenant func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])

Je vois que votre imagePickerController.delegate est correctement défini, donc je suppose que vous avez accidentellement mis le code didFinishPickingMediaWithInfo en dehors de votre classe ViewController

0
budidino