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
}
}
In prepareForSegue
können Sie nicht auf die @IBOutlet
s 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
}
}
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
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
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