2011-02-18 143 views
1

我有一個「着陸頁/查看」我不想導航欄顯示,所以我在viewDidAppear的UINavigationController沒有導航欄

navigationBarHidden = YES; 

關閉它。當我在堆棧上推一個視圖,然後把它移開。主着陸頁顯示導航欄,然後隱藏它,導致我不想要的閃爍。

有沒有辦法讓登陸頁面成爲UIView或什麼?當一個菜單項被觸摸時,應用程序會在默認登陸頁面頂部推新視圖。聽起來好像沒有登陸頁面成爲UINavigationController就很難做到。任何thoguhts?

回答

1

如果您不需要返回到登錄頁面,請使用視圖控制器訪問登錄頁面,並在應用程序啓動時通過導航控制器以模態方式呈現它。


所以你確實想回到登陸頁面。

用UINavigationController很難做到這一點。假設你正在回到登陸視圖。在轉換過程中,舊視圖應該有導航欄,新視圖(着陸頁)不應該有導航欄。 UINavigationController不允許您手動修改過渡動畫。換句話說,您不能使用推/動畫動畫來隱藏/取消隱藏導航欄(使用viewWillAppear不能解決問題)。

那麼,如果我真的需要這個,我該怎麼辦?

我會有一個rootViewController(的UIViewController),其視圖是您的應用程序窗口的唯一子視圖。當您的應用程序啓動時,rootViewController添加登陸視圖作爲其視圖的子視圖。當用戶在那裏選擇一個項目時,您將創建一個UINavigationController,並將相應的視圖控制器作爲其根視圖控制器。

而且,使用類型爲kCATransitionPush和kCATransitionFromRight子類型的CATransition動畫,將導航控制器的視圖添加爲rootViewController視圖的子視圖。

然後,您需要導航控制器第一個視圖的「後退」按鈕。在作爲導航控制器的第一級視圖控制器的所有視圖控制器中,創建一個帶有文本「後退」的欄按鈕項,並將其添加到其navigationItem.leftBarButton屬性中。爲按鈕設置一個目標動作(可能是rootViewController)對。

當動作消息觸發時,使用CATransition動畫(現在使用kCATransitionFromLeft子類型),從rootViewController的視圖中刪除當前導航控制器的視圖。

轉換可能看起來不如原生UINavigationController完美,但我相信這是最好的你可以得到。

+0

我確實想回到主着陸頁,因爲它的作用作爲主菜單。但我不希望導航欄顯示,我不想隱藏它,因爲它再次出現,因爲它隱藏時看起來很有趣。 – Arcadian 2011-02-18 19:30:37

1

嘗試在viewWillAppear中隱藏導航欄,而不是viewDidAppear。

0

實際上,這樣做的方法是實現UINavigationController的委託方法navigationController:willShowViewController:animated。此方法是您應該隱藏和顯示導航欄的位置,以便在推動/彈出動畫時期間發生動畫

0

我遇到了一個簡單的方法,對我來說效果很好,現在還沒有給出。我假設你有一個主登錄頁面的視圖控制器,它被設置爲導航控制器的根視圖控制器。那麼你應該隱藏/顯示在主着陸頁控制器的viewWillAppear中和viewWillDisappear方法的導航欄:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self.navigationController setNavigationBarHidden:YES animated:YES]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 

    [self.navigationController setNavigationBarHidden:NO animated:YES]; 
} 

來源: http://www.iosdevnotes.com/2011/03/uinavigationcontroller-tutorial/