使用推视控制器时如何将Uiimage从一个视图控制器传递到其他视图控制器?

时间:2014-03-21 06:48:24

标签: ios uiviewcontroller

我有三个View控制器。

第一个UIViewController包含一个UIImage,当我点击" crop"按钮,转到第二个视图控制器我通过推视图控制器传递图像,这里我正在裁剪我的UIImage。 在裁剪图像后从图像编辑器Viewcontroller继承的第二个UIViewController中,单击"完成"按钮。

我需要将裁剪后的图像传递到另一个视图控制器,我在这里有分享按钮来分享帖子。

问题是当我将编辑后的图像推到另一个存在共享按钮的视图控制器时,图像没有通过。

3 个答案:

答案 0 :(得分:1)

在进行推送之前,您是将图像保存在Detail Controller中吗?

DetailController *detailVC=[[DetailController alloc]
                          initWithNibName:@"DetailController"
                          bundle:nil];

detailVC.image = self.image;

[self.navigationController pushViewController:detailVC animated:YES];

答案 1 :(得分:1)

<强>团

您在View Controller

上实施协议

Controller.h

@class Controller;

@protocol ControllerDelegate <NSObject>

- (void)sendFrom:(Controller *)controller
                   image:(UIImage *)image;

@end

@interface Controller : UIViewController

@property (weak, nonatomic) NSObject <ControllerDelegate> * delegate;

@end

Controller.m时,如果要发送图片:

[self.delegate sendFrom:self
         image: self.image];

Detail View Controller之后,请勿忘记将其指定为Controller的代表。并实施ControllerDelegate协议。要做到这一点:

DetailController.h中实施协议。你也可以在你的.m上做到这一点。

#import "Controller.h"

@interface DetailController : UIViewController <ControllerDelegate>

您在Controller

中保留Detail Controller的引用
@property (nonatomic, strong) ViewController *controller;

并在delegate的{​​{1}}中分配viewDidLoad。例如:

Detail Controller

不要忘记在详情视图中实施-(void)viewDidLoad:(BOOL)animated{ [super viewDidLoad:animated]; self.controller.delegate = self; } 。在这里,您会收到从Controller传递的图片,并将其保存在protocol method Detail Controller媒体资源中:

UIImage

答案 2 :(得分:0)

您可以将storyboard segue实现到您的详细控制器并使用以下示例代码。

- (void)cropButtonClick:(id)sender
{
    [self performSegueWithIdentifier: @"MySegue" sender:sender];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"MySegue"]) {
        DetailController *detailVC = segue.destinationViewController;
        [detailVC setImage:self.image];
    }
}