2010-09-26 67 views
7

我想在用户拍摄照片或选择保存的照片后添加确认视图。确认视图将显示所选图像,并在工具栏中显示取消和上传按钮。从UIImagePickerController呈现另一个模式视图

我的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中以模态形式呈现确认视图吗?如果是这样,我如何确保在确认视图被解除时,选取器也不会显示?

编辑:

修正了我发布的代码的bug。这就是当我尝试从内存中键入而不是复制+粘贴:(反正,迄今为止的建议没有帮助

如果我提出模式控制器然后解雇选择器,没有任何反应,可能是因为两个控制器。随后驳回

如果我解雇选择器现今的模态控制器,我得到的模态转换的异常:

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

呈现之前你释放模式试试这个:

- (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]; 
} 
+0

我想你还需要在呈现新模态视图之前关闭拾取器。 – 2010-09-27 01:33:45

+0

这些建议都无帮助。该版本只是我输入的代码中的一个错误,但它不在原始代码中。在呈现模态视图之前关闭选取器会导致异常。查看我的编辑。 – pmc255 2010-09-27 06:03:27

0

啊。看起来你不能用相同的方法呈现和解除模态视图控制器。

您可以使用一个属性(以帮助内存管理)来存储信息字典,以及一个ivar来存储诸如“didSelectImage”之类的东西。然后在视图控制器的viewDidAppear中,如果didSelectImage == YES,则使用info字典中的详细信息以模态方式呈现您的视图控制器。

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

3

找到解决方案。事实上,挑选者需要被解雇,关键在于为解雇而关闭动画,以便立即发生,然后呈现第二个模态视图。

编辑:其实,它让我几乎想要的东西。当您关闭选取器时,原始视图会在瞬间显示,然后模态视图会变成动画。这看起来有点时髦。

我也试着保持选择器周围,而不是解雇它。相反,我打电话[picker presentModalViewController:modal animated:YES]。这使我可以顺利地从选取器转换到确认视图。但是,当我完成确认视图时,我需要从原始控制器调用[self dismissModalViewControllerAnimated:YES]。这会在解散所有内容之前首先显示图像选择器。再次,不是我想要的。

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

我该怎么做?

1

尝试......

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    UIViewController *modal = [[UIViewController alloc] init]; 
    modal.view = confirmationView; 
    picker.navigationController pushViewController:modal animated:YES]; 
    [modal release]; 
} 
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一次。

相关问题