首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 導航控制器 Push 缺少返回按鈕:AppDelegate 控制器層級設置順序錯誤

     編輯:程式設計綜合問答

現象

RootViewController 為 UINavigationController,Push 新控制器時導航欄無返回按鈕。

錯誤代碼

UINavigationController *nac = [[UINavigationController alloc] init];
self.window.rootViewController = nac;
HLhomeViewController *homeView = [[HLhomeViewController alloc] init];
[nac addChildViewController:homeView];  // 錯誤:未設為 rootViewController
[self.window addSubview:homeView.view]; // 錯誤:重複添加 view

正確順序

HLhomeViewController *homeView = [[HLhomeViewController alloc] init];
UINavigationController *nac = [[UINavigationController alloc] initWithRootViewController:homeView];
self.window.rootViewController = nac;

// 後續配置
nac.navigationBar.translucent = NO;
nac.navigationBar.barStyle = UIBarStyleBlack;
homeView.navigationItem.title = @"首頁";

關鍵點

  1. 先創建內容控制器,再用其初始化 UINavigationController(initWithRootViewController:)。
  2. 直接設置 window.rootViewController = nac,**切勿** 再 addSubview 內容控制器的 view。
  3. 標題在內容控制器 self.title 或 navigationItem.title 設置。
  4. Push 代碼:[self.navigationController pushViewController:nextVC animated:YES] 自動顯示返回按鈕(需目標控制器有導航欄)。

常見誤區

  • 用 addChildViewController: 代替 rootViewController 設置。
  • 同時持有 window.rootViewController 和 addSubview 導致視圖層級混亂。
  • 在 AppDelegate 中過度配置導航欄樣式,建議遷移到 BaseNavigationController 統一管理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved