我想在用户拍照或选择已保存的照片后添加确认视图。确认视图将仅显示所选图像,并在工具栏中显示取消和上传按钮。
我的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以模态方式呈现确认视图吗?如果是这样,我如何确保在取消确认视图时,也不会显示选择器?
编辑:
修正了我发布的代码中的错误。当我尝试从内存而不是复制+粘贴中输入时会发生这种情况:(无论如何,到目前为止的建议并没有帮助。
如果我提出模态控制器然后解雇选择器,则没有任何反应,大概是因为两个控制器随后都被解雇了。
如果我解雇拾取器然后呈现模态控制器,我得到关于模态转换的例外:
*** 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'
答案 0 :(得分:3)
找到解决方案。实际上,拾取器需要被解雇,并且诀窍是关闭动画以解除该解雇,以便立即发生,然后呈现第二个模态视图。
编辑:实际上,它让我几乎达到我想要的水平。当你关闭选择器时,原始视图会瞬间显示,然后模态视图会被动画化。这看起来有点时髦。
我也试图保持选择器而不是解雇它。相反,我打电话给[picker presentModalViewController:modal animated:YES]
。这让我可以顺利地从选择器转换到确认视图。但是,当我完成确认视图时,我需要从原始控制器调用[self dismissModalViewControllerAnimated:YES]
。这具有在解除所有内容之前首先显示图像选择器的效果。再一次,不是我想要的。
理想情况下,我想要与Facebook iPhone应用程序用于上传照片的效果相同。选择照片后,它会无缝转换为确认视图。从该视图中取消或确认将平滑过渡回原始主视图。这看起来像确认视图是图像选择器的一部分,当它可能只是另一个自定义视图时。
我该怎么做?
答案 1 :(得分:1)
试试这个......
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIViewController *modal = [[UIViewController alloc] init];
modal.view = confirmationView;
picker.navigationController pushViewController:modal animated:YES];
[modal release];
}
答案 2 :(得分: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];
}
答案 3 :(得分:0)
阿。看起来您无法在同一方法中呈现和关闭模态视图控制器。
您可以使用属性(帮助内存管理)来存储信息字典,使用ivar来存储类似“didSelectImage”的内容。然后在视图控制器的viewDidAppear中,如果didSelectImage == YES,则使用信息字典中的详细信息以模态方式显示视图控制器。
确保将didSelectImage重置为NO,并在不再需要时将信息字典属性设置为nil。
答案 4 :(得分: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调用dismiss,以便同时错过B和C.