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

Posted

技术标签:

【中文标题】使用推送视图控制器时如何将 Uiimage 从一个视图控制器传递到另一个视图控制器?【英文标题】:How to Passing Uiimage from one view controller to Other view controller when using push view controller used? 【发布时间】:2014-03-21 06:48:24 【问题描述】:

我有三个视图控制器。

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

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

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

【问题讨论】:

***.com/questions/14640456/… 和 ***.com/questions/19353248/… 的副本 你如何将图像传递给另一个视图控制器 通过使用 initwith image 方法,我将图像从一个视图控制器传递到另一个视图控制器,并且我将编辑后的图像作为 imageview.image = v2.image 传递 【参考方案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>

您在Detail Controller 中保留了Controller 的引用

@property (nonatomic, strong) ViewController *controller;

并在Detail ControllerviewDidLoad 中分配其delegate。例如:

-(void)viewDidLoad:(BOOL)animated

      [super viewDidLoad:animated];

      self.controller.delegate = self;
   

不要忘记在您的详细信息视图中实现protocol method。在这里,您会收到从 Controller 传递的图像,并将其保存在您的 Detail Controller UIImage 属性中:

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

   self.image = image;

【讨论】:

【参考方案2】:

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

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

detailVC.image = self.image;

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

【讨论】:

但是我尝试过的相同代码没有在共享视图控制器中显示编辑后的图像,即在第三个视图控制器中 尝试使用委托、通知或键值编码传递信息 我想说的另一件事是第二个视图控制器,我正在将图像深度复制为已编辑的图像,所以请您看一下代码 - (id)initWithImage:(UIImage *)image self = [self init]; if (self) originalImage = [图像深度复制]; NSLog(@"原始图像为 %@",originalImage); 返回自我; 上面的原始图像有编辑过的图像,我需要在单击共享按钮后将其发送到共享视图控制器我应该共享图像【参考方案3】:

您可以在细节控制器中实现故事板 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];
    

【讨论】:

以上是关于使用推送视图控制器时如何将 Uiimage 从一个视图控制器传递到另一个视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何将视图控制器从视图控制器推送为全屏幕,呈现为半模式

当应用程序处于终止模式时,如何从推送通知重定向到特定的视图控制器

导航项标题视图 - 所有推送视图控制器都相同

如何从视图控制器推送 xib

使用另一个 UINavigationController 推送视图控制器

在 iPhone 中推送 UIViewController 时如何更改标签栏项目的选定索引