Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.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
Iphone 从UIImagePickerController显示另一个模式视图_Iphone_Uiimagepickercontroller_Modalviewcontroller - Fatal编程技术网

Iphone 从UIImagePickerController显示另一个模式视图

Iphone 从UIImagePickerController显示另一个模式视图,iphone,uiimagepickercontroller,modalviewcontroller,Iphone,Uiimagepickercontroller,Modalviewcontroller,我想在用户拍照或选择保存的照片后添加确认视图。确认视图将只显示所选图像,工具栏中有一个取消和上载按钮 我的UIImagePickerController是从我的一个视图控制器以模式显示的,该视图控制器由导航控制器控制,而导航控制器又由选项卡栏控制器控制 我如何以模式显示确认视图,以便在用户选择照片时占据整个屏幕(如图像选择器视图)?理想情况下,我想要这样的东西: - (void)imagePickerController:(UIImagePickerController *)picker did

我想在用户拍照或选择保存的照片后添加确认视图。确认视图将只显示所选图像,工具栏中有一个取消和上载按钮

我的UIImagePickerController是从我的一个视图控制器以模式显示的,该视图控制器由导航控制器控制,而导航控制器又由选项卡栏控制器控制

我如何以模式显示确认视图,以便在用户选择照片时占据整个屏幕(如图像选择器视图)?理想情况下,我想要这样的东西:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissModalViewControllerAnimated:YES];
    UIViewController *modal = [[UIViewController alloc] init];
    modal.view = confirmationView;
    [self presentModalViewController:modal animated:YES];
    [modal release];
}
然而,这会使应用程序崩溃。我是否应该从选取者那里以模式呈现确认视图?如果是,如何确保在取消确认视图时,也不会显示选择器

编辑:

修复了我发布的代码中的错误。这就是当我尝试从记忆中输入而不是复制+粘贴时发生的情况:(无论如何,目前的建议没有帮助

如果我呈现模态控制器,然后关闭选择器,则不会发生任何事情,可能是因为两个控制器随后都会关闭

如果我关闭选择器,然后显示模态控制器,我会得到一个关于模态转换的异常:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempting to begin a modal transition from <UINavigationController: 0x6b33940> to <UIViewController: 0x6b62b00> while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed'
***由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“正在尝试从开始模式转换,而转换正在进行中。请等待ViewDidDisplay/ViewDidEnglish,以了解当前转换已完成”

在演示模态之前,您正在释放模态。请尝试以下操作:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIViewController *modal = [[UIViewController alloc] init];
    modal.view = confirmationView;
    [self presentModalViewController:modal animated:YES];
    [modal release];
    [picker dismissModalViewControllerAnimated:YES];
}

啊。看起来你不能用同样的方法显示和关闭一个模态视图控制器

您可以使用一个属性(帮助内存管理)来存储信息字典,使用一个ivar来存储类似“didSelectImage”的内容。然后在视图中,如果didSelectImage==是,则使用信息字典中的详细信息以模式显示视图控制器


确保将didSelectImage重置为NO,并在不再需要它们时将info dictionary属性设置为nil。

找到了解决方案。确实,需要解除拾取程序,诀窍是关闭动画以立即解除拾取,然后显示第二个模式视图

编辑:事实上,它让我几乎达到了我想要的效果。当你关闭选择器时,原始视图会在一瞬间显示出来,然后模态视图会变成动画。这看起来有点怪

我还试图保持选取器在周围,而不是将其关闭。相反,我调用了
[picker presentModalViewController:modal animated:YES]
。这使我能够顺利地从选取器转换到确认视图。但是,当我完成确认视图时,我需要调用
[self dismissModalViewControllerAnimated:YES]
来自原始控制器。其效果是先显示图像选择器,然后再忽略所有内容。同样,这不是我想要的

理想情况下,我想要的效果与Facebook iPhone应用程序上传照片时使用的效果相同。一旦你选择了一张照片,它会无缝地过渡到确认视图。从该视图取消或确认将平滑地过渡回原始的主视图。这会使确认视图看起来像是图像选择器的一部分,当它处于p很可能只是另一个自定义视图

我该怎么做???

试试这个

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIViewController *modal = [[UIViewController alloc] init];
    modal.view = confirmationView;
    picker.navigationController pushViewController:modal animated:YES];
    [modal release];
}
这对我很有用:

[myViewControllerA presentModalViewController:myViewControllerB];
//... let myViewControllerB do its job
[myViewControllerB presentModalViewController:myViewControllerC];
//... let myViewControllerC do its job
[myViewControllerA dismissModalViewControllerAnimated:YES];

也就是说,您可以像这样呈现视图控制器
A=>B(模态)=>C(模态)
,然后您从视图控制器A中调用Disclose,以便同时错过B和C。

我认为您还需要在呈现新的模式视图之前关闭选取器。这两个建议都没有帮助。发布只是我键入的代码中的一个bug,但它不在原始代码中。在呈现之前解除选取器并没有帮助模态视图导致异常。请参阅我的编辑。