2016-04-29 41 views
5

Ho bisogno di creare una vista che funzioni come le pagine works like pages, con un popup in cui posso scegliere di scegliere una foto dalla mia biblioteca o crearne una nuova.Includi UIImagePickerController in una vista

Attualmente, ho un ViewController, presente come Popover. Nel ViewController, ho inserito un ContainerView e ho dichiarato che la sua classe è UIImageViewController. Questo mi sta mostrando la libreria di foto, ma non trovo il modo di scegliere qualcosa in: My ViewController presented as Popover.

Quando scelgo una foto, non succede nulla. Ho provato a mettere alcune funzioni

(func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!)) 

nel mio ViewController ma non funziona. Ho letto che UIImagePickerController non supporta la sottoclasse, quindi come le pagine fanno questa roba?

Ecco il mio codice ViewController:

import UIKit 

class MenuAddResources: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    var newMedia: Bool? 
    let imagePicker = UIImagePickerController() 

    @IBAction func takePhoto(sender: AnyObject) { 
      if(UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)){ 
      //load the camera interface 
      let picker : UIImagePickerController = UIImagePickerController() 
      picker.sourceType = UIImagePickerControllerSourceType.Camera 
      picker.delegate = self 
      picker.allowsEditing = false 
      self.presentViewController(picker, animated: true, completion: nil) 
      self.newMedia = true 
     } 
     else{ 
      //no camera available 
      let alert = UIAlertController(title: NSLocalizedString("ERROR", comment: ""), message: NSLocalizedString("NO_CAMERA", comment: ""), preferredStyle: .Alert) 
      alert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .Default, handler: {(alertAction)in 
      alert.dismissViewControllerAnimated(true, completion: nil) 
     })) 
      self.presentViewController(alert, animated: true, completion: nil) 
     } 
    } 
    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    func image(image: UIImage, didFinishSavingWithError error: NSErrorPointer, contextInfo:UnsafePointer<Void>) { 
     if error != nil { 
      let alert = UIAlertController(title: NSLocalizedString("ERROR", comment: ""), message: NSLocalizedString("IMAGE_SAVE_FAILED", comment: ""), preferredStyle: UIAlertControllerStyle.Alert) 

      let cancelAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .Cancel, handler: nil) 

      alert.addAction(cancelAction) 
      self.presentViewController(alert, animated: true, completion: nil) 
     } 
    } 

    func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!){ 
     self.dismissViewControllerAnimated(true, completion: {() -> Void in 
     }) 

     // Let's store the image 
     let now:Int = Int(NSDate().timeIntervalSince1970) 
     let imageData = UIImageJPEGRepresentation(image, 85) 
     //imageData?.writeToFile(documentsDirectory + "/\(now).jpg", atomically: true) 
     print(imageData) 

     /* will do stuff with the image */ 
    } 

    func imagePickerControllerDidCancel(picker: UIImagePickerController) { 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 

} 
+0

si prega di condividere codice rilevante anche – Shubhank

+0

Ho modificato. Qualcosa di molto strano è che se non metto la riga "let imagePicker = UIImagePickerController()", il selettore non viene mostrato ... –

+0

_Quando scelgo una foto, non succede nulla. Ho provato a mettere alcune funzioni_. quindi intendi dire che arriva UIImagePicker ma non puoi scegliere alcuna foto da esso? – Shubhank

risposta

2

Sembra che si sta utilizzando UIImagePickerViewController attraverso una visione contenitore e quindi il set delegato isnt, quindi non callback a ricevere l'immagine scelto metodi.

Per risolvere questo problema, è necessario eseguire l'override prepareForSegue nella classe e che il cast del segue.destinationViewController al selettore e impostare la sua delegate-self