试图显示从一个视图控制器捕获的 UIImage,并在 iOS 中的另一个视图控制器中显示它

Posted

技术标签:

【中文标题】试图显示从一个视图控制器捕获的 UIImage,并在 iOS 中的另一个视图控制器中显示它【英文标题】:Trying to display a UIImage captured from one viewController, and display it in another in iOS 【发布时间】:2013-08-27 15:41:44 【问题描述】:

我有一个我正在开发的 iPad 应用程序,我从我的主 viewController(称为 mainViewController)调用并显示另一个从 .xib 文件创建的 viewController(称为 nextViewController)。第二个 viewController 允许用户像这样捕获图像:

- (IBAction)imageCapture:(id)sender 

    _myImage = [_nextView captureImage];
    UIImageWriteToSavedPhotosAlbum(_myImage, nil, nil, nil);
    [self dismissViewControllerAnimated:YES completion:nil];


捕获此图像后,我现在需要将此图像传递回调用 viewController (mainViewController),但老实说,我不确定如何执行此操作。我试图在我的 nextViewController 中创建我的 mainViewController 的属性引用,我试图这样做是为了将新获取的图像的引用传递给 mainController 的属性,但这不起作用。

提前感谢所有回复的人。

【问题讨论】:

你可以通过协议传递这个值。您是如何使用 protokol 进行尝试的? 在什么情况下它不起作用?您是否考虑过使其成为委托关系? 感谢您的及时回复。我试图弄清楚如何使用协议来做到这一点,但这对我来说是新的。我理论上知道什么是协议,但在这种情况下,如果可能的话,我需要一个示例。 【参考方案1】:

要有效地做到这一点,您应该在呈现的视图控制器中创建属性mainViewController。这会导致可重用性问题,而且它的紧密耦合是不可取的。相反,正如上面的 cmets 所述,您应该使用协议。对于 Objective-C,请参阅this documentation 了解协议语法。

在你的 NextViewController 中,你应该像这样创建一个委托方法:

-(void)nextViewController:(NextViewController *)nextViewController capturedImage:(UIImage *)image;

然后,在你的主视图控制器类中,你应该实现这个方法并对图像做任何你想做的事情。值得注意的是,您可能希望从主视图控制器中关闭控制器。在创建下一个视图控制器时不要忘记设置它的委托属性。

我希望这能澄清你的问题!

【讨论】:

我会让委托方法返回一个UIImage 非常感谢您的及时回复。当我将您的行用于我的协议声明时: -(void)nextViewController:(NextViewController *)nextViewController captureImage:(UIImage *)image;我收到以下错误:期望类型,关于 (NextViewController *) 这是什么原因? 是的,在这种情况下我遇到了这个错误。这意味着您需要将您的协议部分移动到头文件中的@interface 之外,并且您需要在协议最初所在的位置添加一行@protocol NextViewControllerDelegate;。这基本上是一个声明问题,这意味着当你使用它时,该类还没有被声明。 @MarcusAdams 我使用 void 返回值而不是图像的原因是主视图控制器想要图像,而不是下一个视图控制器。由于协议方法由主控制器运行,它不应该传回图像。【参考方案2】:

首先,您应该在secondViewController 中创建一个属性,以便在出现第二个ViewController 之前将您的mainViewController 传递给。例如:

_secondViewController.mainViewController = self;

其次,您需要mainViewController 中的属性才能将图像从secondViewController 传回。例如:

self.mainViewController.capturedImage = _myImage;

希望这会对你有所帮助。

【讨论】:

我想我只会传递图像,而不是控制器。

以上是关于试图显示从一个视图控制器捕获的 UIImage,并在 iOS 中的另一个视图控制器中显示它的主要内容,如果未能解决你的问题,请参考以下文章

捕获显示横向方向的 UIimage 视图中存储的图像

设置新视图的 UIImage 并显示

UIImageView 不显示从通知中获取的 UIImage

UIImage视图不显示图像

无法在第二个视图控制器中更新我的 UIImage

无法从 iPhone 文档目录位置中的已保存文件重新加载 UIImage