2012-09-05 90 views
2

當前版本我的項目:如何在這種情況下實現UINavigationController?

我在我的應用程序5個不同的UIViewControllers。我已將 FirstViewController設置爲使用 Attributes Inspector的Initial View Controller。我來回移動,從一個視圖控制器到 另一個使用按鈕,而我分配模式塞格斯,從一個 視圖控制器到另一個,用故事板

我想改變什麼:

我想明顯地保留導航按鈕,刪除模態段並使用 a UINavigationController代替。如果我理解這個概念 正確,使用UINavigationController當我需要進入每個 UIButton-IBAction,並在方法的最後我要推下一 視圖控制器我想要移動到,到我NavigationController(我也 必須先彈出當前的一個?)。但是,我不知道如何 實現所有正確的。

什麼我迄今所做的:

  • 我刪除從腳本的所有模式塞格斯,不停的導航按鈕及其相應的IBActions沿
  • 我未選中的複選框中的屬性督察,使我的FirstViewController我的應用程序的初始視圖控制器
  • 我走進我的AppDelegate.m並試圖創建導航控制器還有,讓我FirstViewController是RootViewController的

MyAppDelegate.m

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIViewController *myFirstViewController = [[FirstViewController alloc] init]; 
    UINavigationController *myNavigationController = [[UINavigationController alloc] initWithRootViewController:myFirstViewController]; 

    [myNavigationController pushViewController:myFirstViewController animated:YES]; 

    // Override point for customization after application launch. 

    return YES; 
} 
  • 我又試圖通過對進入的IBAction爲一個 導航按鈕用於測試上述正在我FirstViewController並實施了以下 以便在按下 按鈕時移動到我的SecondViewController:

FirstViewController.m

- (IBAction)goRightButton:(UIButton *)sender 
{ 
    // some code drawing the ButtonIsPressed UIImageView on the current View Controller 

    UIViewController *mySecondViewController = [[SecondViewController alloc] init]; 
    [self.navigationController pushViewController:mySecondViewController animated:YES]; 
} 

但沒有任何反應。我究竟做錯了什麼 ?

+0

一個給予好評。 – Cyrille

回答

2

您未鏈接您的XIB文件。請將您的導航控制器

UIViewController *myFirstViewController = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
navigationController = [[UINavigationController alloc] initWithRootViewController:myFirstViewController]; 

使用下面的代碼。如果您使用的是故事板從一個視圖移動到另一個

UIViewController *mySecondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
[self.navigationController pushViewController:mySecondViewController animated:YES]; 
+0

您是故意還是錯誤地直接使用'navigationController = ..'而不是'UINavigationController * navigationController ='? –

+0

這隻適用於如果你不是從故事板加載視圖界面,​​而是從單獨的xib文件加載的話 –

+0

UINavigationController * navigationController肯定是必需的,但我在AppDelegate.h中聲明瞭導航控制器,所以我沒有在這段代碼中寫入它 –

0

,你應該只在導航控制器拖到那裏,把它掛到您的應用程序代表。只要它是主要的故事板,並且您已經確定要先加載視圖控制器,則無需在應用程序委託中加載任何視圖。

爲了編程推認爲是在故事板,你需要做類似如下:

//bundle can be nil if in main bundle, which is default 
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
MyCustomViewController *customVC = (MyCustomViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"customVC"]; 
//standard way 
[self.navigationController pushViewController:customVC animated:YES]; 

//custom animation 
[UIView transitionWithView:self.navigationController.view duration:0.5 options:UIViewAnimationOptionTransitionCurlUp animations:^{ 
    [self.navigationController pushViewController:customVC animated:NO]; 
} completion:nil]; 

你確定你在故事板編輯器中添加標識視圖控制器。以下是一些截圖,以幫助展示我的意思。

navigation controller with arrow to indicate initial load

只爲你的問題的清晰

place where you change the identifier of the view controller, so you can call it