ios - pass - moviendo el UIImageView desde la vista principal a otra
passing data between view controllers swift (4)
En PostView, simplemente crea una variable como
var img: UIImage!
Reemplace esta línea
pass.imgv.image = imageChosen.image
conpass.img = imageChosen.image
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()
}
}