2015-07-23 6 views
8

Ich versuche, einen Benutzer hochgeladen Bild von einem UIImageView zu einem anderen UIImageView auf einem anderen View-Controller zu bewegen. Ich bin in der Lage, den Benutzer ein Bild hochladen und in der ersten UIImageView gespeichert haben, aber nachdem sie die Schaltfläche "Post" drücken, bleibt die UIImageView auf der nächsten Ansicht Controller leer.Passing Bild zu einem anderen View-Controller (Swift)

Hinweis: browsingImage ist der Name des UIImageView auf den zweiten View-Controller (Ziel UIImageView)

Jede Hilfe geschätzt sehr würde!

@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

Sollte es postingImage.image nicht itemToAdd.browsingImage.image =? –

Antwort

1

Aus Ihrer Beschreibung ist browsingImage in Ziel Viewcontroller, so in dieser Linie

itemToAdd.postingImage.image = browsingImage.image 

Sie passieren die Zielimageview-Source-Imageview

16

In prepareForSegue können Sie nicht den @IBOutlet zugreifen s des Ziel-View-Controllers, weil sie noch nicht eingerichtet wurden. Sie sollten das Bild auf eine Eigenschaft der Ziel-View-Controller, zuweisen und sie dann an den richtigen Platz in viewDidLoad:

Im Quelle-View-Controller:

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

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

Im Ziel-View-Controller:

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

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

Zum Zeitpunkt der Segue geschieht Ihre UIImageView ist nicht initialisiert, so dass Sie kein Bild zuweisen können, die beste Praxis wäre, die UIImage übergeben und initialisieren Sie Ihre UIImageView in viewDidLoad.

so in Ihrer ListPage Klasse machen eine Eigenschaft des Typs Ihre prepareForSegue Linie ändern UIImage als

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

    if segue.identifier == "toBrowsePage" { 


     var itemToAdd = segue.destinationViewController as! ListPage 

     itemToAdd.image = browsingImage.image 

     } 

    } 

in viewDidLoad oder viewDidAppear Ihres Bestimmungs viewController Sie so etwas wie dieses

browsingImage.image = image 
0

IBOutlets sind tun in Ihrem aktuellen View-Controller nicht verfügbar. Die Ausgänge sind noch nicht initialisiert, da die Ihre zweite Ansicht noch nicht geladen ist.

Stattdessen können Sie in Ihrem zweiten viewController eine UIImage-Variable erstellen und ihr den Wert in prepareForSegue zuweisen.

Und in der ViewDidLoad-Methode Ihres ViewControllers weisen Sie diesen Wert Ihrem ImageView-Ausgang zu.

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

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

In Ihrem nächsten Viewcontroller eine Variable

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

Im viewDidLoad Methode deklarieren

postingImage.image = receivedImage 
Verwandte Themen