【问题标题】:How do i pass an UIImageView between view controllers?如何在视图控制器之间传递 UIImageView?
【发布时间】:2014-11-19 11:06:07
【问题描述】:

我正在尝试从视图控制器中的相机胶卷中选择图像,然后在另一个视图控制器中传递/显示该图像。为什么 image view 不通过?

当登陆 FirstViewController 时,我在导航栏中有一个到 SecondViewController 的 segue。

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

【问题讨论】:

  • 你为什么要传递图像视图?为什么不只传递图像数据?
  • 哦,因为我很烂... ^^ 愚蠢的我! :P

标签: ios objective-c ios7 uiimageview uiimagepickercontroller


【解决方案1】:

如果它只是我们在这里讨论的图像,那么让我们为图像创建一个属性。

@property (nonatomic, strong) UIImage *imageIWant; 

一旦我们有了 image 属性,我们就可以通过调用[UIImage imageWithData:imageData]; 或从我们的 Plist 中的文件设置它来设置您想要的图像。我不建议保存 imageView 并在控制器之间传递该视图,因为在我们的 MVC 模型中,视图和模型是分开的。归根结底,它是模型中的图像,而不是视图元素。

【讨论】:

  • 我应该发送图片,然后将 self.imageView.image -property 设置为该图片。
猜你喜欢
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 2018-06-22
  • 2012-04-20
相关资源
最近更新 更多