2015-07-23 3 views
8

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

Примечание: 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 

    } 

} 
+0

Не должно быть itemToAdd.browsingImage.image = postingImage.image? –

ответ

1

Из вашего описания, browsingImage в целевом ViewController, так в этой линии

itemToAdd.postingImage.image = browsingImage.image 

Вы передаете ImageView назначения к исходному ImageView

16

В prepareForSegue вы не можете получить доступ к @IBOutlet s контроллера точки назначения, поскольку они еще не настроены. Вы должны присвоить изображение свойства контроллера представления назначения, а затем переместить его на место в 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 
    } 
} 
0

Во время 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

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

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

И в вашем втором представлении viewController 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