簡體   English   中英

如何用替換的 UINavigationController 推送 UIViewController

[英]How to push UIViewController with replaced UINavigationController

我有一個繪制自定義背景的自定義UINavigationController 在根視圖 controller 上訪問self.navigationController時已經設置了導航 controller。現在我想做的是推送一個新視圖 controller,但將新視圖 controller 中的導航 controller 替換為默認視圖(沒有自定義)背景)。

基本上,新視圖 controller 正在呈現導航欄為半透明的圖像。 因為它從根視圖 controller 重用了導航 controller(帶有自定義背景),所以最終效果是帶有自定義背景的半透明導航欄。

我知道在將新視圖 controller 作為模式視圖呈現時,我可以替換導航欄。 但是推新view controller的時候能換掉嗎?

我試過這樣的事情,但這段代碼沒有效果:

LTImageViewController* controller = [[LTImageViewController alloc] init];
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:self];
[navController pushViewController:controller animated:YES];

您不能只是將視圖 controller 推送到任何舊導航控制器的堆棧上。 (好吧,你可以,但你不會走得太遠。)導航 controller 應該是應用程序 window 的根視圖 controller。如果你想使用你的自定義導航 controller,你應該用你的自定義替換現有導航 controller版本。 你會做這樣的事情:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
delegate.window.rootViewController = [[MyCustomNavController alloc] init];

在 UINavigationController 中推送視圖 controller 時,它會創建一個堆棧,我認為我們無法在另一個視圖中推送導航 controller。

您可以做一件事以模態方式顯示您的 viewController 並將 TransitionStyle 更改為 UIModalTransitionStyleCoverVertical

可能有幫助

如果您的問題只是導航欄的樣式/顏色/圖像,則在viewWillAppear:中您可以設置您的 viewControllers:

 [self.navigationController.navigationBar setBackgroundImage:yourImage                             
                                               forBarMetrics:UIBarMetricsDefault];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM