Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在尝试显示从一个viewController捕获的UIImage,并在iOS中的另一个中显示它_Ios_Uiviewcontroller_Uiimage_Xib - Fatal编程技术网

正在尝试显示从一个viewController捕获的UIImage,并在iOS中的另一个中显示它

正在尝试显示从一个viewController捕获的UIImage,并在iOS中的另一个中显示它,ios,uiviewcontroller,uiimage,xib,Ios,Uiviewcontroller,Uiimage,Xib,我有一个正在开发的iPad应用程序,从我的主viewController(称为mainViewController)调用并显示另一个viewController(称为nextViewController),它是从.xib文件创建的。第二个viewController允许用户捕获如下图像: - (IBAction)imageCapture:(id)sender { _myImage = [_nextView captureImage]; UIImageWriteToSavedPh

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

- (IBAction)imageCapture:(id)sender {

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

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


首先,您应该在
secondViewController
中创建一个属性,以便在显示secondViewController之前将您的
mainViewController
传递给。例:

_secondViewController.mainViewController = self;
其次,您需要在
mainViewController
中使用一个属性将图像从
secondViewController
传回。例:

self.mainViewController.capturedImage = _myImage;

希望这将对您有所帮助。

要有效地做到这一点,您不应该在显示的视图控制器中创建属性
mainViewController
。这将导致可重用性问题,再加上紧密耦合是不可取的。相反,正如上面的注释所指出的,您应该使用协议。有关Objective-C,请参阅了解协议语法

在NextViewController中,您应该使委托方法如下所示:

-(void)nextViewController:(NextViewController *)nextViewController capturedImage:(UIImage *)image;
然后,在主视图控制器类中,应该实现此方法并对图像执行任何操作。值得注意的是,您可能希望从主视图控制器中关闭控制器。创建下一个视图控制器时,不要忘记设置其委托属性


我希望这能澄清你的问题

您可以通过协议传递此值。你是怎么用protokol的?它在哪方面不起作用?您是否考虑过将其作为代理关系?谢谢您的及时回复。我试图找出如何使用协议来实现这一点,但这对我来说是新的。理论上我知道协议是什么,但在这种情况下,如果可能的话,我需要一个例子。我想我只传递映像,而不是控制器。我会让委托方法返回一个
UIImage
。非常感谢您的快速回复。当我使用您的行进行协议声明时:-(void)nextViewController:(nextViewController*)nextViewController capturedImage:(UIImage*)image;我得到了以下错误:预期类型,关于(NextViewController*)有什么原因吗?是的,我在这种情况下有过这个错误。这意味着您需要将协议部分移过头文件中的@接口,并且需要添加一行
@protocol-NextViewControllerDelegate在协议最初所在的位置。这基本上是一个声明问题,这意味着在使用该类时尚未声明该类。@Marcusadam我使用void返回值而不是映像的原因是主视图控制器需要映像,而不是下一个视图控制器。由于协议方法由主控制器运行,因此它不应该传回映像。