在另一个后面呈现ViewController

时间:2009-08-30 10:17:14

标签: iphone objective-c iphone-sdk-3.0

我有图像选择器,它收集另一个视图控制器的数据(来自three20的TTMessageController),我希望这个消息编辑器出现在图像选择器后面,所以当图像piker滑出时,将会出现带有预填充数据的消息控制器。

像这样的代码

[self.navigationController presentModalViewController:composeController animated:NO];
[picker dismissModalViewControllerAnimated:YES];

反之亦然。该怎么办?如何在composeController控制器后面显示picker

提前致谢。

4 个答案:

答案 0 :(得分:0)

修改

好吧我认为这里的问题是模态位,因为iPhone看起来不像你有2个视图设置为模态,甚至是从一个模态视图到另一个模式视图的动画。

他们肯定必须是模态的吗?如何将它们添加到普通导航堆栈?

您可以先将消息视图添加到堆栈中(非动画),这样当您弹出消息视图时,它就会存在。

试试这个:

向堆栈添加视图的顺序会影响它们在关闭它们时显示的顺序。

这部分将composeController添加到堆栈中,然后为顶部的选择器设置动画。使用此代码显示选择器控制器(即而不是模态对话框):

[self.navigationController pushViewController:composeController animated:NO];
[self.navigationController pushViewController:picker animated:YES];

然后,当您完成选择器后,您可以将视图“弹出”回消息编写器:

[self.navigationController popViewControllerAnimated:YES];

您现在应该没有引用代码中剩余的任何模态对话框。我相信这应该比modal更好,它实际上是用于在每个其他视图上方显示一个视图,而不是从视图切换到视图。

希望有所帮助!

答案 1 :(得分:0)

实际上从viewController帮助中删除动画。

[picker dismissModalViewControllerAnimated:NO];
[self presentModalViewController:composeNavController animated:NO]; // If YES it crashes

但是,如果得到我的意思,那就不是iPhone-ish,即使是淡出黑色或只是一些视觉效果会使它看起来更好,更好。从技术上讲,它有效。

答案 2 :(得分:0)

您可以关闭图像选择器模态视图控制器,推送Message控制器(两者都带有动画:NO),然后使用CATransition执行您自己的Cocoa类动画,而不是尝试在选择器后面显示另一个viewController。图像选择器动画离开屏幕。

答案 3 :(得分:0)

您需要将这些动画分开,以便它们不会在同一个runloop中执行。我遇到了这样一种情况:操作系统不喜欢将模态视图连接到背后。

试试这个:

- (void)myCallbackMethod{

[picker dismissModalViewControllerAnimated:YES];
[self performSelector:@selector(presentMessage) withObject:nil afterDelay:0.25];


}

- (void)presentMessage{

[self.navigationController presentModalViewController:composeController animated:YES];

}