2012-05-22 172 views
0

我想使用導航控制器來推/彈出視圖,但我不想在按鈕頂部的酒吧;我自己在做導航UI。推導航控制器堆棧後,視圖不顯示

所以我在我的AppDelegate創建一個navigationController:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.viewController = [[WSViewController alloc] initWithNibName:@"WSViewController" bundle:nil]; 
    self.window.rootViewController = self.viewController; 

    self.navController = [[UINavigationController alloc] 
         initWithRootViewController: self.viewController]; 

    [self.window makeKeyAndVisible]; 

    return YES; 
} 

,然後在我的WSViewController,我有推導航堆棧上的另一個觀點的IBAction爲方法(我已經驗證,它的正確這樣做;我看到它在堆棧上):

- (IBAction)showInfo:(UIButton *)sender { 
    if (self.wsInfoViewController == nil) { 
     WSInfoViewController *wic = [[WSInfoViewController alloc] initWithNibName:@"WSInfoViewController" bundle:nil]; 
     self.wsInfoViewController = wic; 
    } 
    [self.navigationController pushViewController:self.wsInfoViewController animated:YES]; 
} 

但我沒有看到的信息視圖顯示出來,當我在我的WSViewController(INFO按鈕被顯示出來就好了)自來水。

如果我使navigationController成爲根控制器,那麼我當我點擊info按鈕時看到wsInfoViewController,但是,我也得到了頂部的導航欄,我不想!

因此......首先,我錯誤地認爲我可以用這種方式使用導航控制器(即將它用於堆棧目的,但不用於任何UI)?第二,如果我沒有錯,爲什麼不是我推入堆棧顯示的視圖?我猜這是因爲我沒有正確地將導航控制器連接到窗口,但我不知道該怎麼做。

謝謝!

Elisabeth

+0

你連接IBOutlet與你的viewController? –

+1

你的意思是當我點擊按鈕時我的showInfo方法被調用?是的,並且我在將視圖推送到堆棧的位置之後放置了一個斷點,並且該視圖肯定在堆棧中。我認爲問題是窗口不知道navigationController堆棧,但我不知道如何正確設置它。 – Elisabeth

+0

不,我的意思是你在FileOwner中將你的IBOutlet WSInfoViewController與viewController連接起來了嗎? –

回答

0

所以我想我有我的問題的答案。也就是說,您必須將導航控制器設置爲AppDelegate窗口的根視圖控制器才能使用它,否則,窗口不知道它。我的WSViewController仍然是導航控制器的根視圖控制器。然後擺脫導航欄,你可以隱藏它。 下面是更新後的代碼:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.viewController = [[WSViewController alloc] initWithNibName:@"WSViewController" bundle:nil]; 
    // doesn't work! 
    //self.window.rootViewController = self.viewController; 

    self.navController = [[UINavigationController alloc] 
         initWithRootViewController: self.viewController]; 
    // do this instead 
    self.window.rootViewController = self.navController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

要隱藏的導航欄在視圖中,在你想要隱藏,添加以下方法每個視圖:

- (void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self.navigationController setNavigationBarHidden:YES animated:animated]; 
} 

- (void) viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [self.navigationController setNavigationBarHidden:NO animated:animated]; 
} 

這是偉大的工作爲止!

相關問題