it-roy-ru.com

Передача изображения в другой View Controller (Swift)

Я пытаюсь переместить загруженное пользователем изображение из одного UIImageView в другое UIImageView на другом View Controller. Я могу заставить пользователя загрузить изображение и сохранить его в первом UIImageView , но после того, как они нажмут кнопку «Post», UIImageView на следующем контроллере представления останется пустым.

Примечание: browsingImage - это имя UIImageView на втором контроллере представления (целевой UIImageView)

Любая помощь будет принята с благодарностью!

@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

В prepareForSegue вы не можете получить доступ к @IBOutlets контроллера представления назначения, потому что они еще не были настроены. Вы должны назначить изображение свойству конечного контроллера представления, а затем переместить его на место в viewDidLoad:

В контроллере вида источника:

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

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

В контроллере вида назначения:

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

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

IBOutlets не доступны в вашем текущем контроллере представления. Розетки еще не инициализированы, так как ваш второй вид еще не загружен

Вместо этого вы можете создать переменную UIImage во втором viewController и присвоить ей значение в prepareForSegue.

И в вашем втором методе viewCidroller viewDidLoad присвойте это значение вашему выходу ImageView.

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

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

В вашем следующем viewController объявите переменную с именем 

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

В методе viewDidLoad 

postingImage.image = receivedImage
1
iPhoneDeveloper

Из вашего описания browsingImage находится в целевом viewController, поэтому В этой строке

itemToAdd.postingImage.image = browsingImage.image

Вы передаете конечный просмотр изображений в исходный просмотр изображений.

1
Leo

Во время возникновения Segue ваш UIImageView не инициализируется, поэтому вы не можете присвоить ему изображение, лучше всего передать UIImage и инициализировать UIImageView в viewDidLoad.

поэтому в вашем классе ListPage сделайте свойство типа UIImage измените строку prepareForSegue как 

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

    if segue.identifier == "toBrowsePage" {


        var itemToAdd = segue.destinationViewController as! ListPage

        itemToAdd.image = browsingImage.image

        }

    }

в viewDidLoad или viewDidAppear вашего пункта назначения viewController вы будете делать что-то вроде этого

browsingImage.image = image
0
Qazi