2010-01-21 41 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