web-dev-qa-db-ja.com

didFinishPickingMediaWithInfoは呼び出されませんSwift

画像を取得してセルに戻すUITableViewCellボタンがあります。 UIImagePickerControllerを呼び出して画像を取得すると、次のデリゲートが呼び出されません

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

これは、UITableViewControllerの私のtakePhotoFunctionです。

@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)}
21
Tal Zion

Swiftでは、このデリゲートメソッドが呼び出されます。

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

違いは次のとおりです。

  1. ピッカーの前に下線_があります
  2. 末尾の情報タイプが[String:AnyObject]から[String:Any]に変更されました

私は同じ問題を抱えていて、これらの変更を行ったときにそれはうまくいきました。

41
JPetric

1。_UIImagePickerControllerDelegate,UINavigationControllerDelegate_を追加することを忘れないでください
2。 viewDidLoad()に_picker.delegate = self_を追加します
3。デリゲートメソッドを追加

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

それが役に立てば幸い :)

15
Vinu David Jose

Swift 4.2の場合

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

Swift 4.2の場合

このメソッドは名前が変更され、以下のように呼び出す必要があります。このデリゲートメソッドが呼び出さなかったのと同じ問題がありましたが、その後、私の問題は解決しました。

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

}
2
Noshaid Ali

Swift 4.2:

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

Swift 5を使用すると、わずかに更新されます

これは、iOS 12.2でこれをテストするために作成した単一画面の例です。

import UIKit


class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    //MARK: Open Photos Galley Button Action method
    @IBAction func openPhotosGallery(_ sender: Any) {

        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
            let myPickerController = UIImagePickerController()
            myPickerController.delegate = self;
            myPickerController.sourceType = .photoLibrary
            self.present(myPickerController, animated: true, completion: nil)
        }
    }

    //MARK: ImagePicker Controller Delegate methods
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        self.dismiss(animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        let chosenImage = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
        imageView.image = chosenImage
        dismiss(animated:true, completion: nil)
    }
}
1
swiftBoy

Swift 4.2の場合

デリゲートメソッドがプログラムによって呼び出されなかったときにも、同様の問題が発生しました。

imagePicker.delegate = selfは、viewDidLoad()メソッドでは[〜#〜] not [〜#〜]にする必要がありますが、ギャラリーを開くメソッドである必要があります。このような:

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

        imagePicker.sourceType = .photoLibrary

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

UIImagePickerController()オブジェクトで、allowsEditingプロパティがtrueに設定されている場合、デリゲートメソッドで次のように画像を取得する必要があります。

もしallowsEditing == true

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

        if let pickedImage = info[.editedImage] as? UIImage {

              //do something with image

        }

           dismiss(animated: true, completion: nil)

    }

もしallowsEditing == false

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

            if let pickedImage = info[.originalImage] as? UIImage {

                  //do something with image

            }

               dismiss(animated: true, completion: nil)

        }
0
Frankenxtein

デリゲートメソッドはfunc imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])と呼ばれるようになりました

imagePickerController.delegateは正しく設定されているので、誤ってdidFinishPickingMediaWithInfoコードをViewControllerクラスの外に置いたと思います

0
budidino

Uが宣言したデリゲートメソッドがないため、この方法を使用する必要があります。

func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info:[NSObject : AnyObject]) {
        println("Calling")       
}

Apple Documentのリファレンス: https://developer.Apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIImagePickerControllerDelegate_Protocol/index.html#//Apple_ref/ occ/intfm/UIImagePickerControllerDelegate/imagePickerController:didFinishPickingMediaWithInfo

0
Dheeraj Singh