从一个视图图像传递到另一个

问题描述:

我从照片库的用户得到一个形象,我想将它传递到另一个视图...从一个视图图像传递到另一个

我读过,我应该能够简单地做这样的事情:

secView.imgView.image = selectedImage.image; 

设置我的UIImageView在第二视图是从我的UIImageView ... 图像但在第二视图仅仅是空的UIImageView ...

我代码是...

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(仅相关部分)

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

在另一个岗位,我读了另一种方法是做到这一点:

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

然后在secondview.h中

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

和.M

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

但这两种方法会导致一个空的UIImageView ... 那么,什么是正确的方法来这样做呢?

在此先感谢!

编辑

SecondView当时是相当简单的...(在发布代码中,我尝试并按照方法2)

@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 

SOLUTION 好了...回去到第一种方法,并做了一些最终工作的改变......

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

而在第二个视图中,我创建了UIImage * theImage - 然后我设置了[imgView setImage:theImage];在viewDidLoad中,它的工作...

+0

请把SecondView – Ganzolo 2012-02-29 09:45:25

+0

它已经现在添加类的代码:)不过我已经显示在代码的唯一另外除了标准...(请注意,secondView贴是我尝试提到的第二种方法...) – user969043 2012-02-29 09:49:10

+0

谢谢!将UIImage与UIImageView从原始视图控制器传递给secondViewController也适用于我。也许是因为第二个VC上的UIImageView是IBOutlet,它不起作用。 – LevinsonTechnologies 2014-11-23 03:52:11

这解决了这个问题:

-(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 

和secondView的.M:

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

我想我找到了问题:

在你的类secondView,你的UIImageView没有连接到笔尖文件对象的UIImageView。

你应该有这样的事情:

IBOutlet UIImageView *imgView; 

要检查视图是否正确连接到笔尖,你可以这样做:

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

你的问题是有趣的,请让我知道如果它不起作用我会更深入地检查。

+0

其实,我在@property中创建了IBOutlet(非原子,保留)IBOutlet UIImageView * imgView; :)所以这不是错误...不幸的是:)只是可以肯定的是,我添加了代码来改变backgroundcolor,这工作... – user969043 2012-02-29 09:59:18

+0

Oups我没有看到它。我会更深入地检查:) – Ganzolo 2012-02-29 10:00:52

+0

你确定你的selectedImage.image!= nil吗? – Ganzolo 2012-02-29 10:06:07

//首先视图控制器: - (空) 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]; 

}

//第二视图控制器传递UIImage对象:

  • (无效)viewDidLoad中{

    _bg_imageview.image = _bb_image; }