2010-01-21 83 views
3

我的应用程序在用户添加新的foo时使用模态视图。用户使用此模式视图选择foo类型。根据所选类型的不同,用户需要了解更多信息。iPhone模态视图内的另一种模态视图?

我想使用另一个模态视图来询问这些额外的信息。我试图创建像第一个(这很好)的新模式视图,并导致Xcode中的堆栈溢出/“加载堆栈帧”错误。

我是否以完全错误的方式去解决这个问题,即这只是一个非常糟糕的主意?我应该重新考虑UI吗?

UINavigationController *navigationController = [[UINavigationController alloc] 
    initWithRootViewController:addController]; 
[self presentModalViewController:navigationController animated:YES]; 
+0

通常存在与呈现多个modalViewControllers没有问题。您能发布用于两种不同演示文稿的完整代码吗?另外:来自屏幕底部的两个叠加模态VC可能会让用户感到困惑。也许你应该在导航控制器的新级别中提供附加信息。 – FelixLam 2010-01-21 09:49:35

回答

3

固定。通过将第二个视图控制器推送到第一个视图控制器的UINavigationController,我得到了我想要的行为。

创建第一模态的视图的

FooAddController *addController = [FooAddController alloc] 
    initWithNibName:@"FooAddController" bundle:nil]; 
addController.delegate = self; 
addController.foo = newFoo; 
UINavigationController *navigationController = [[UINavigationController alloc] 
    initWithRootViewController:addController]; 
[self presentModalViewController:navigationController animated:YES]; 
[addController release]; 

创建第二模态的视图的(在FooAddController)

FooAddSizeViewController *addSizeController = [[FooAddSizeViewController alloc] 
    initWithNibName:@"FooAddSizeViewController" bundle:nil]; 
addSizeController.delegate = self; 
addSizeController.foo = self.foo; 
[self.navigationController pushViewController:addSizeController animated:YES]; 
[addSizeController release]; 
2

您需要承担这种情况下您调用presentModalViewController当你处理模式控制器的几个层次护理。 让我们假设你有:你想

[myControllerA presentModalViewController:myControllerB animated:YES];

下一次显示一个模式控制器,而B具有焦点,您应该调用

[myControllerB presentModalViewController:myControllerC animated:YES];

为了正确获取父控制器组。 控制器的层次是A-> B - > C

+1

我遇到了myControllerC不会显示的问题,如果我将它作为myControllerA的第二个子节点,但是如果它是myControllerB的子节点,它将正常工作。谢谢! – 2010-06-29 23:59:10

0

您是否尝试在两个步骤中拨打presentModalViewControllerself.navigationController