it-swarm.com.de

Bild an einen anderen View Controller übergeben (Swift)

Ich versuche, ein von einem Benutzer hochgeladenes Bild von einem UIImageView in ein anderes UIImageView auf einem anderen View Controller zu verschieben. Ich kann den Benutzer ein Bild hochladen und in der ersten UIImageView speichern lassen, aber nachdem er auf die Schaltfläche "Post" geklickt hat, bleibt die UIImageView auf dem nächsten View-Controller leer.

Hinweis: browseImage ist der Name der UIImageView auf dem zweiten View Controller (Ziel UIImageView).

Jede Hilfe wäre sehr dankbar!

@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

    }

}
12
user5034511

In prepareForSegue können Sie nicht auf die @IBOutlets des Zielansicht-Controllers zugreifen, da sie noch nicht eingerichtet wurden. Sie sollten das Bild einer Eigenschaft des Zielansicht-Controllers zuweisen und es dann in viewDidLoad an die gewünschte Stelle verschieben:

Im Quellensicht-Controller:

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

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

In der Zielansichtsteuerung:

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

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

Auf IBOutlets kann in Ihrem aktuellen View-Controller nicht zugegriffen werden. Die Ausgänge sind noch nicht initialisiert, da die Ihre zweite Ansicht noch nicht geladen ist

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

Und weisen Sie in der viewDidLoad-Methode Ihres zweiten viewControllers diesen Wert Ihrem ImageView-Outlet 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 deklarieren Sie eine Variable namens 

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

In der viewDidLoad-Methode 

postingImage.image = receivedImage
1
iPhoneDeveloper

In Ihrer Beschreibung befindet sich browsingImage im Ziel viewController, also In dieser Zeile

itemToAdd.postingImage.image = browsingImage.image

Sie übergeben die Zielbildansicht an die Quellbildansicht

1
Leo

Zu dem Zeitpunkt, an dem die Variable Segue ausgeführt wird, ist Ihr UIImageView nicht initialisiert, sodass Sie ihm kein Bild zuweisen können. Die beste Vorgehensweise wäre, die Variable UIImage zu übergeben und die Variable UIImageView in viewDidLoad zu initialisieren.

nehmen Sie in Ihrer ListPage-Klasse eine Eigenschaft des Typs UIImage vor, und ändern Sie Ihre prepareForSegue-Zeile in 

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 Ziels viewController werden Sie so etwas tun

browsingImage.image = image
0
Qazi