passing pass data another ios swift uiimageview pass-data

ios - pass - moviendo el UIImageView desde la vista principal a otra



passing data between view controllers swift (4)

  1. En PostView, simplemente crea una variable como var img: UIImage!

  2. Reemplace esta línea pass.imgv.image = imageChosen.image con pass.img = imageChosen.image

  3. En viewDidLoad () de PostView, agregue esta línea, imgv.image = image

No podemos establecer propiedades de IBOutlets de secondView desde la primera vista, porque IBOutlets de ViewController obtendrá memoria después de la ejecución de viewDidLoad()

Por lo tanto, debe crear una variable de datos adecuada para pasar datos a IBOutlet.

Aquí está el código de ejemplo.

class FirstViewController: UIViewController { @IBOutlet weak var imageViewInput: UIImageView! override func viewDidLoad() { super.viewDidLoad() } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { //check the condition for your segue.identifier, if any var destination : NewViewContrller! = segue.destinationViewController as NewViewContrller ; if let image = imageViewInput?.image { destination.outputImage = image; } } } class NewViewContrller: UIViewController { @IBOutlet weak var outputImageView: UIImageView! var outputImage: UIImage! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. if let image = outputImage { outputImageView.image = image; } } }

mi código funciona bien al elegir la imagen de la galería y mostrarla en la misma vista, lo que estoy atrapado ahora, es transferir ese UIImageView elegido a la siguiente actividad cuando se hace clic en el botón "siguiente"

aquí está el código que abre la galería

@IBAction func gallery(sender: AnyObject) { if UIImagePickerController.availableMediaTypesForSourceType(.PhotoLibrary) != nil { picker.allowsEditing = false picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary presentViewController(picker, animated: true, completion: nil) } }

este es el código que muestra la imagen en la misma vista

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { var chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage imageChosen.contentMode = .ScaleAspectFit imageChosen.image = chosenImage dismissViewControllerAnimated(true, completion: nil) }

ahora después del UIImageView guardado en la imagenChosen, aquí está el código que estoy usando para pasar esa imagen a la siguiente vista

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { var pass:postView = segue.destinationViewController as! postView if(segue.identifier == "next"){ pass.imgv.image = imageChosen.image } }

esta línea de código que hace que el programa se bloquee

pass.imgv.image = imageChosen.image

el imgv en la segunda vista se declara así

@IBOutlet weak var imgv: UIImageView!

¿Qué estoy haciendo mal aquí, por favor dirígeme


Está utilizando una referencia débil para la vista de imagen e intenta obtenerla en otros controladores. haz lo siguiente.

@IBOutlet Strong var imgv: UIImageView

En segundo lugar, su forma de recuperar el controlador de vista es incorrecto ... Pruébelo como sigue

if segue.identifier == "ShowCounterSegue" { if let destinationVC = segue.destinationViewController as? OtherViewController{ destinationVC.numberToDisplay = counter } }


No puede acceder al UIImageView directamente en el segundo Controlador de Vista. En su lugar crea un UIImage variable en el segundo View Controller y asignale tu UIImage seleccionado. Más tarde, en viewdidload del segundo controlador de UIImageView configuró el UIImageView .

Primera vista

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { let pass:postView = segue.destinationViewController as! postView if(segue.identifier == "next"){ pass.tempImage = imageChosen.image } }

Segunda vista

@IBOutlet weak var imgv: UIImageView! var tempImage:UIImage! override func viewDidLoad() { super.viewDidLoad() self.imgv.image=tempImage }


No puede establecer datos en una vista que aún no se represente. Pase la imagen a la segunda vista y configure esa imagen en ImageView en viewDidLoad de secondView

override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!) { if segue.identifier == "next" { var pass:second = segue.destinationViewController as! second pass.currentImage=myImageView.image; } }

// Segunda vista

class second: UIViewController { @IBOutlet weak var tempImgView: UIImageView! var currentImage:UIImage! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. if((currentImage) != nil){ tempImgView.image=currentImage; } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }