2014-09-24 86 views
0

我试图从视图控制器中的相机卷选择图像,然后通过它/在另一个视图控制器中显示该图像。为什么图像视图不通过?如何在视图控制器之间传递UIImageView?

当在FirstViewController上着陆时,我在导航栏中有一个Segue到SecondViewController。

//FirstViewController.h

#import <UIKit/UIKit.h> 

@interface FirstViewController : UIViewController 

@property (strong, nonatomic) IBOutlet UIImageView *imageView; 

@end 

//FirstViewController.m

#import "FirstViewController.h" 
#import "SecondViewController.h" 

@interface FirstViewController() <SeconViewControllerDelegate> 

@end 

@implementation FirstViewController 

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

#pragma mark - SecondViewControllerDelegate 
- (void)didDismissWithImageView:(UIImageView *)imageView 
{ 
    self.imageView = imageView; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"addPhoto"]) { 
     SecondViewController *secondVC = segue.destinationViewController; 
     secondVC.delegate = self; 
    } 
} 

@end 

//SecondViewController.h

#import <UIKit/UIKit.h> 
#import <MobileCoreServices/MobileCoreServices.h> 

@protocol PhotoPickerDelegate <NSObject> 

- (void)didDismissWithImageView:(UIImageView *)imageView; 

@end 

@interface SecondViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> 

@property (weak, nonatomic) id<PhotoPickerDelegate> delegate; 

@property (strong, nonatomic) UIImageView *imageView; 

- (IBAction)useCameraRoll:(id)sender; 

@end 

//SecondViewController.m

#import "SecondViewController.h" 

@interface SecondViewController() 

@end 

@implementation SecondViewController 

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

- (IBAction)useCameraRoll:(id)sender 
{ 
    if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeSavedPhotosAlbum]){ 
     UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
     imagePicker.delegate = self; 
     imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
     imagePicker.mediaTypes = @[(NSString *) kUTTypeImage]; 
     imagePicker.allowsEditing = NO; 
     [self presentViewController:imagePicker animated:YES completion:nil]; 
    } 
} 


#pragma mark - UIImagePickerControllerDelegate 
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    NSString *mediaType = info[UIImagePickerControllerMediaType]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 

    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { 

     UIImage *image = info[UIImagePickerControllerOriginalImage]; 
     _imageView.image = image; 

    } 

    if ([self.delegate respondsToSelector:@selector(didDismissWithImageView:)]) { 
     [self.delegate didDismissWithImageView:_imageView]; 
    } 

    [self.navigationController popViewControllerAnimated:YES]; 
} 

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
+3

你为什么要传递图像视图?为什么不传递图像数据? – atreat 2014-09-24 20:15:42

+0

哦,因为我吸... ^^愚蠢的我! :P – 2014-09-24 20:21:18

回答

1

如果它只是我们在谈论这里,那么图像可以使该图像的属性。

@property (nonatomic, strong) UIImage *imageIWant; 

一旦我们有我们的形象属性,我们可以通过调用[UIImage imageWithData:imageData];设置所需的图像或从我们的plist中的文件进行设置。我不建议保存imageView并在控制器之间传递该视图,因为在我们的MVC模型中,视图和模型是分开的。在一天结束的时候,它的模型中的图像不需要视图元素。

+0

我应该发送图像,然后将self.imageView.image -property设置为该图像。 – 2014-09-25 10:53:33

相关问题