2014-09-24 92 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

相關問題