7

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

我的 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];
}

但是,这会使应用程序崩溃。我应该从 PICKER 模态显示确认视图吗?如果是这样,我如何确保当确认视图被关闭时,选择器也不会显示?

编辑:

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

如果我呈现模态控制器 THEN 关闭选择器,则不会发生任何事情,大概是因为两个控制器随后都被关闭了。

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

*** 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'
4

5 回答 5

3

找到了解决方案。实际上,选择器需要被解除,诀窍是关闭动画以使解除立即发生,然后呈现第二个模态视图。

编辑:实际上,它让我几乎得到了我想要的。当您关闭选择器时,原始视图会显示片刻,然后模态视图会被动画化。这看起来有点时髦。

我还试图让选择器保持在身边而不是解雇它。相反,我打电话给[picker presentModalViewController:modal animated:YES]. 这让我可以顺利地从选择器过渡到确认视图。但是,当我完成确认视图时,我需要[self dismissModalViewControllerAnimated:YES]从原始控制器调用。这具有在关闭所有内容之前首先显示图像选择器的效果。再次,不是我想要的。

理想情况下,我想要 Facebook iPhone 应用程序用于上传照片的相同效果。选择照片后,它会无缝过渡到确认视图。从该视图取消或确认将平稳过渡回原始主视图。它看起来像是确认视图是图像选择器的一部分,而它可能只是另一个自定义视图。

我该怎么做呢??

于 2010-09-27T06:42:01.777 回答
1

尝试这个...

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIViewController *modal = [[UIViewController alloc] init];
    modal.view = confirmationView;
    picker.navigationController pushViewController:modal animated:YES];
    [modal release];
}
于 2011-08-14T01:34:18.207 回答
0

啊。看起来您无法以相同的方法呈现和关闭模态视图控制器。

您可以使用属性(以帮助进行内存管理)来存储信息字典,并使用 ivar 来存储诸如“didSelectImage”之类的内容。然后在您的视图控制器的 viewDidAppear: 中,如果 didSelectImage == YES,则使用信息字典中的详细信息以模态方式显示您的视图控制器。

确保将 didSelectImage 重置为 NO 并将 info 字典属性设置为 nil 一旦不再需要它们。

于 2010-09-27T06:16:33.650 回答
0

您在呈现模态之前发布它。尝试这个:

- (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];
}
于 2010-09-26T21:59:22.353 回答
0

这对我有用:

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

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

于 2012-05-08T11:58:17.703 回答