3

之前:以編程方式構建/導航導航控制器

我的應用程序基於獨立視圖控制器。我可以從一個通過更換上的應用程序委託根視圖控制器切換到另一個:

ade.window.rootViewController = newController; 

...和所有的工作權,到現在爲止。

明天:

我們必須添加我們的應用程序的基礎NavigationController部分,這將幫助用戶瀏覽我們的:

品牌=>型號名稱=>顏色

所以,用戶將選擇一種顏色,然後單擊一個按鈕:現在我將切換到另一個實際位於該導航層次之外的UIViewController(稱爲「pippo」)(我無法將其推送到nav-controller中用於多種方法,我被迫這樣做!)。

我想要的是從「pippo」回到我的「彩色」屏幕。所以,我正在尋找一種方法以編程方式「導航」導航控制器我恢復,我的意思是:

  • 我恢復我的導航控制器

  • 現在我對品牌,但我不我不想讓我的用戶在這裏,我想向他們展示他們最後一個顏色(我把它保存在首選項中)

  • 我該如何模擬已知品牌和型號的選擇?

非常感謝。

回答

11

在應用程序委託applicationDidFinishLoading

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController]; 

[window makeKeyAndVisible]; 
[window addSubview:navController.view]; 

這將實例導航控制器,並將其添加到窗口的圖。

現在,在RootViewController的類(可以說其所謂FirstViewController),你可以這樣做:

- (void)clickedAButton:(id)selector { 
    SecondViewController *nextViewController = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 
    // and push it onto the 'navigation stack' 
    [self.navigationController pushNavigationController:nextViewController animated:YES]; 
    // and release 
    [nextViewController release]; 
} 

而在你SecondViewController您可以使用導航從堆棧:

- (void)clickedAnotherButton:(id)selector { 
    // goes back to the last view controller in the stack 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

所以對你來說,它會去:

在應用程序代理中設置導航控制器與Brand作爲根視圖控制器 用戶選擇他們的品牌和您pushViewController:animated:視圖控制器Model。然後用戶選擇他們的模型和pushViewController:animated:Color視圖控制器。類似地,用戶選擇一種顏色,然後按下視圖控制器Pippo。現在,如果用戶按下(或者您撥打popViewControllerAnimated:),它將返回到Color視圖控制器,其狀態與用戶使其離開Pippo控制器時的狀態相同。

+0

soorry,錯誤的答案,原因有二:我從我的文章引述如下:「」皮波「),這實際上駐留在導航層次以外(我可以」把它推到導航控制器中用於幾種方法,我強迫這麼做!)。「所以你知道我不能和我不想在我的導航控制器中推「pippo」。 - 另外,我想在沒有用戶交互的情況下導航控制器。 : - \ –

+0

我想不出一個單一的情況下,你不能推視圖控制器到導航堆棧。但是,你是老闆。使用push和pop方法可以在沒有用戶交互的情況下瀏覽堆棧。無論如何,無法幫助你,因爲我不再瞭解。 –

+0

我的「皮波」是一個自定義imagepicker,照片相機。不過,我會嘗試推動我的品牌和模型視圖控制器沒有動畫,並看看它做什麼。 –

0

寫下面的代碼在AppDelegate.m類

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    MainViewController *mainViewController = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; 
    self.nav = [[UINavigationController alloc] initWithRootViewController:mainViewController]; 
    self.nav.navigationBarHidden = YES; 
    [mainViewController release]; 
    [_window addSubview:nav.view]; 
    [_window makeKeyAndVisible]; 
}