2012-02-29 15 views
5

sto ricevendo un'immagine dall'utente dalla galleria fotografica, e voglio passare ad un altro punto di vista ...Passando immagine da una vista all'altra

Ho letto che dovrei essere in grado semplicemente fare qualcosa di simile:

secView.imgView.image = selectedImage.image; 

Impostazione mia UIImageView sulla seconda vista per essere l'immagine dal mio UIImageView ... Ma l'UIImageView nel secondo punto di vista è solo vuoto ...

mio il codice è questo ...

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 (solo le parti rilevanti)

-(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]; 
} 

In un altro post ho letto che un altro approccio è stato quello di fare questo:

-(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]; 
} 

e quindi nella seconda vista.h

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

e .m

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

Ma entrambi gli approcci si traduce in un UIImageView vuoto ... Allora, qual è l'approccio corretto per fare questo?

Grazie in anticipo!

EDIT

SecondView è abbastanza semplice in questo momento ... (nel codice scritto cerco di seguire il metodo due)

@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 

SOLUZIONE Va bene ... Sono andato indietro al primo metodo e apportato alcune modifiche che alla fine ha funzionato ...

-(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]; 
} 

E in SecondView, ho creato UIImage * theImage - quindi ho impostato [imgView setImage: theImage]; in viewDidLoad, che ha lavorato ...

+0

prega di inserire il codice di classe SecondView – Ganzolo

+0

E 'stato aggiunto ora :) ma io avevo già mostrato l'unica aggiunta nel codice a parte la serie ... (si prega di notare, il secondView pubblicato è dove ho prova il secondo metodo menzionato ...) – user969043

+0

Grazie! Passare UIImage vs UIImageView dal controller di visualizzazione originale al secondoViewController ha funzionato anche per me. Forse perché UIImageView sul secondo VC era un IBOutlet che non avrebbe funzionato. – LevinsonTechnologies

risposta

7

Questo risolto il 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 

e nel .m di secondView:

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

Credo di aver trovato il problema:

Nella classe secondView, il vostro UIImageView non è collegata alla UIImageView oggetto nel file pennino.

Si dovrebbe avere qualcosa di simile:

IBOutlet UIImageView *imgView; 

Per controllare se la vista è collegato correttamente al pennino si può fare questo:

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

Il tuo problema è interessante favore, fatemi sapere se non funziona controllo più a fondo.

+0

In realtà, creo IBOutlet in @property (nonatomic, retain) IBOutlet UIImageView * imgView; :) quindi non è l'errore ... sfortunatamente :) solo per essere sicuro, ho aggiunto il codice per cambiare il backgroundcolor, che ha funzionato ... – user969043

+0

Oups Non l'ho visto. Controllerò un po 'più in profondità :) – Ganzolo

+0

Sei sicuro del tuo Imageimage.image! = Nil? – Ganzolo

0

// Prima viewController: - (vuoto) 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]; 

}

// secondo viewController passare UIImage oggetto:

  • (vuoto) viewDidLoad {

    _bg_imageview.image = _bb_image; }

Problemi correlati