2015-07-23 10 views
8

Sto cercando di spostare un'immagine caricata utente da un UIImageView ad un altro UIImageView su un diverso controller View. Sono in grado di consentire all'utente di caricare un'immagine e di salvarla nel primo UIImageView ma dopo aver premuto il pulsante "Post", UIImageView sul controller di visualizzazione successivo rimane vuoto.Passando immagine a un altro controller View (Swift)

Nota: browsingImage è il nome del UIImageView sul secondo controller della vista (destinazione UIImageView)

Qualsiasi aiuto sarebbe molto apprezzato!

@IBAction func cameraButton(sender: AnyObject) { 

    addNewPicture() 

} 


func addNewPicture() { 

    let picker = UIImagePickerController() 
    picker.allowsEditing = true 
    picker.delegate = self 

    presentViewController(picker, animated: true, completion: nil) 
} 

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { 

    postingImage.image = image 
    self.dismissViewControllerAnimated(true, completion: nil) 

} 

@IBAction func postButton(sender: AnyObject) { 

    performSegueWithIdentifier("toBrowsePage", sender: nil) 


} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "toBrowsePage" { 


     var itemToAdd = segue.destinationViewController as! ListPage 

     itemToAdd.postingImage.image = browsingImage.image 

    } 

} 
+0

Non dovrebbe essere itemToAdd.browsingImage.image = postingImage.image? –

risposta

1

Dalla tua descrizione, browsingImage è nelle strette viewController, così in questa linea

itemToAdd.postingImage.image = browsingImage.image 

si passa l'ImageView destinazione imageview fonte

16

In prepareForSegue non è possibile accedere al @IBOutlet s del controller della vista di destinazione perché non sono ancora stati impostati. Si dovrebbe assegnare l'immagine a una proprietà del controller della vista di destinazione, e quindi spostarlo nella posizione in viewDidLoad:

In vista origine regolatore:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "toBrowsePage" { 
     let dvc = segue.destinationViewController as! ListPage 
     dvc.newImage = postingImage.image 
    } 
} 

In vista di destinazione del controller:

class ListPage: UIViewController { 
    @IBOutlet weak var browsingImage: UIImageView! 
    var newImage: UIImage! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     browsingImage.image = newImage 
    } 
} 
0

Al momento dello Segue, quando UIImageView non è inizializzato, quindi non è possibile assegnarvi un'immagine, la migliore pratica sarebbe quella di passare lo UIImage e inizializzare lo UIImageView in viewDidLoad.

così nella classe ListPage fanno una proprietà di tipo UIImage cambiare la vostra linea prepareForSegue come

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "toBrowsePage" { 


     var itemToAdd = segue.destinationViewController as! ListPage 

     itemToAdd.image = browsingImage.image 

     } 

    } 

in viewDidLoad o viewDidAppear di destinazione viewController si farà qualcosa di simile

browsingImage.image = image 
0

IBOutlets sono non accessibile nel tuo attuale controller di visualizzazione. Le prese non sono ancora inizializzate dal la seconda vista non è ancora stata caricata.

Invece è possibile creare una variabile UIImage nella seconda viewController e assegnarvi il valore in prepareForSegue.

E nel secondo viewController's viewDidLoad method assegna quel valore alla tua presa ImageView.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "toBrowsePage" { 
     let destination = segue.destinationViewController as! ListPage 
     destination.receivedImage = postingImage.image 
    } 
} 

Nella tua prossima viewController dichiarare una variabile denominata

@IBOutlet weak var postingImage: UIImageView! 
var receivedImage : UIImage? 

Nel metodo viewDidLoad

postingImage.image = receivedImage