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

5
我正在从照片库获取用户的图像,并希望将其传递给另一个视图...
我已经了解到我应该能够简单地执行以下操作:
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;

and .m

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

但是这两种方法都导致UIImageView为空... 那么正确的方法是什么呢?
提前感谢!
编辑
目前SecondView非常简单...(在发布的代码中,我尝试遵循第二种方法)
@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
解决方案 好的...回到了第一种方法并做了一些修改,最终解决了问题...
-(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 - 然后在viewDidLoad中设置了[imgView setImage:theImage]; 这个方法成功了...

请提供 SecondView 类的代码。 - Ganzolo
现在已经添加了 :) 但是除了标准代码之外,我已经展示了唯一的添加内容...(请注意,我尝试第二种方法的地方是posted的secondView...) - user969043
谢谢!将UIImage与UIImageView从原始视图控制器传递到secondViewController对我也起作用了。也许是因为secondVC上的UIImageView是IBOutlet,所以它不起作用。 - LevinsonTechnologies
3个回答

7
这解决了这个问题:
-(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];
}

第二个视图:

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

0

第一个视图控制器:

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

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

- (void)viewDidLoad {

    _bg_imageview.image = _bb_image;
}

0

我想我找到了问题:

在你的secondView类中,你的UIImageView没有与nib文件中的UIImageView对象连接。

你应该有这样的代码:

IBOutlet UIImageView *imgView;

要检查视图是否正确连接到 Nib,可以执行以下操作:

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

你的问题很有趣,请告诉我如果它不起作用,我会深入检查。


实际上,我在@property (nonatomic, retain) IBOutlet UIImageView *imgView; :)中创建了IBOutlet,所以那不是错误...不幸的是 :)为了确保,我添加了更改背景颜色的代码,这起作用了... - user969043
哎呀,我没看到。我会再仔细检查一下 :) - Ganzolo
似乎不是这样的...当我从图库中选择一张图片后,我设置:selectedImage.image = [info objectForKey:UIImagePickerControllerOriginalImage]; ... - user969043
是的,但也许它没有返回正确的图像。您可以尝试在sendImage:(id)sender方法中更改颜色,以查看是否可以访问。没有测试东西很难检查您的代码 :) - Ganzolo
不错 :) 我也在那上面挣扎了20分钟 ^^ - Ganzolo
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接