2012-02-29 17 views
5

Estoy recibiendo una imagen del usuario de la galería de fotos, y quiero pasarlo a un otro punto de vista ...paso de imagen de una vista a otra

He leído que yo debería ser capaz simplemente hacer algo como esto:

secView.imgView.image = selectedImage.image; 

ajuste de mi UIImageView en el segundo fin de ser la imagen de mi UIImageView ... Pero el UIImageView en el segundo punto de vista es simplemente vacío ...

mi el código es este ...

ViewController.h:

@interface ViewController : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate> 
{ 
    UIImagePickerController *picker; 
    IBOutlet UIImageView *selectedImage; 

    SecondView *secondView; 
} 

@property (nonatomic, retain) UIImageView *selectedImage; 
@property (nonatomic, retain) SecondView *secondView; 

-(IBAction)sendImage:(id)sender; 
-(IBAction)openGallery:(id)sender; 

@end 

ViewController.m (sólo las partes pertinentes)

-(IBAction)sendImage:(id)sender 
{ 
    if(self.secondView == nil) 
    { 
     SecondView *secView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]]; 

     self.secondView = secView; 

     secView.imgView.image = selectedImage.image; 
    } 

    [self.navigationController pushViewController:secondView animated:YES]; 
} 

-(IBAction)openGallery:(id)sender 
{ 
    picker = [[UIImagePickerController alloc] init]; 

    picker.delegate = self; 

    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 

    [self presentModalViewController:picker animated:YES]; 
} 

-(void)imagePickerControllerDidCancel:(UIImagePickerController *) Picker 
{  
    [Picker dismissModalViewControllerAnimated:YES];  
} 

- (void)imagePickerController:(UIImagePickerController *) Picker 

didFinishPickingMediaWithInfo:(NSDictionary *)info 
{  
    // Save the image 
    selectedImage.image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

    [Picker dismissModalViewControllerAnimated:YES]; 
} 

En otro post he leído que era otro enfoque para hacer esto:

-(IBAction)sendImage:(id)sender 
{ 
    if(self.secondView == nil) 
    { 
     SecondView *secView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]]; 

     self.secondView = secView; 

     [secView setImage:selectedImage.image]; 
    } 

    [self.navigationController pushViewController:secondView animated:YES]; 
} 

y luego en la segunda vista.h

-(void)setImage:(UIImage *)image; 

y .m

-(void)setImage:(UIImage *)image 
{ 
    [imgView setImage:image]; 
} 

Pero ambos enfoques produce un vacío ... UIImageView Entonces, ¿qué es el enfoque correcto para hacer esto?

¡Gracias de antemano!

EDITAR

SecondView es bastante simple en el momento ... (en el código publicado Trato de seguir el método dos)

@interface SecondView : UIViewController 
{ 
    UIImageView *imgView; 
} 

@property (nonatomic, retain) IBOutlet UIImageView *imgView; 

-(void)setImage:(UIImage *)image; 

@end 

@implementation SecondView 

@synthesize imgView; 

-(void)setImage:(UIImage *)image 
{ 
    [imgView setImage:image]; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

@end 

SOLUCIÓN bien ... Volvimos para el primer método e hizo algunas modificaciones que finalmente funcionaron ...

-(IBAction)sendImage:(id)sender 
{ 
    if(self.secondView == nil) 
    { 
     SecondView *secView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]]; 

     self.secondView = secView; 

     secView.theImage = selectedImage.image; 
    } 

    [self.navigationController pushViewController:secondView animated:YES]; 
} 

Y en la segunda Vista, creé UIImage * theImage - luego configuré [imgView setImage: theImage]; en viewDidLoad, que trabajó ...

+0

favor coloque el código de la clase SecondView – Ganzolo

+0

Se ha añadido ahora :) Pero ya habían demostrado la única adición en el código aparte de la norma ... (tenga en cuenta, la secondView publicada en el que se prueba el segundo método mencionado ...) – user969043

+0

¡Gracias! Pasar UIImage vs UIImageView desde el controlador de vista original al segundo ViewController funcionó para mí también. Tal vez porque UIImageView en el segundoVC era un IBOutlet, no funcionaría. – LevinsonTechnologies

Respuesta

7

Esto resolvió el problema:

-(IBAction)sendImage:(id)sender 
{ 
    if(self.secondView == nil) 
    { 
     SecondView *secView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]]; 

     self.secondView = secView; 

     secView.theImage = selectedImage.image; 
    } 

    [self.navigationController pushViewController:secondView animated:YES]; 
} 

SecondView:

@interface SecondView : UIViewController 
{ 
    UIImageView *imgView; 
    UIImage *theImage; 
} 

@property (nonatomic, retain) IBOutlet UIImageView *imgView; 
@property (nonatomic, retain) UIImage *theImage; 

-(void)setImage:(UIImage *)image; 

@end 

y en el .m de secondView:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    [imgView setImage:theImage]; 
} 
0

Creo que he encontrado el problema:

En su secondView clase, su UIImageView no está conectado a la UIImageView objeto en el archivo semilla.

Usted debe tener algo como lo siguiente:

IBOutlet UIImageView *imgView; 

Para comprobar si la vista está correctamente conectado a la punta que puede hacer esto:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     [imgView setBackgroundColor:[UIColor redColor]]; 
    } 
    return self; 
} 

Su problema es interesante, por favor, hágamelo saber si no funciona, revisaré más a fondo.

+0

En realidad, creo IBOutlet en @property (nonatomic, retener) IBOutlet UIImageView * imgView; :) así que ese no es el error ... lamentablemente :) solo para estar seguro, agregué el código para cambiar el color de fondo, que funcionó ... – user969043

+0

Oups No lo vi. Voy a comprobar un poco más profundo :) – Ganzolo

+0

¿Estás seguro de que tuImagen.imagen seleccionado! = Nulo? – Ganzolo

0

// Primero ViewController: - (void) passimage {

Second_ViewController *select_main =[[UIStoryboard storyboardWithName:@"Main" bundle:nil]instantiateViewControllerWithIdentifier:@"Second_ViewController"]; 
    select_main.tt_image=_bg_imageview.image; 
    [[self navigationController] pushViewController:select_main animated:YES]; 

}

// segunda ViewController pasar UIImage objeto:

  • (void) viewDidLoad {

    _bg_imageview.image = _bb_image; }

Cuestiones relacionadas