日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS 多层级路由导航控制器 NavigationControoller 实现路由切换

發布時間:2025/3/12 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS 多层级路由导航控制器 NavigationControoller 实现路由切换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

IOS 導航控制器分為多層級導航控制器naviagtionController 和平行分欄控制器 UITabBar(底部切換欄)。IOS導航控制器是什么呢?其實就是我們web的路由切換功能,只不過在app開發切換是ViewController。

什么是導航控制器 NavigationController ?

NavigationController 是繼承ViewController實現的,我們可以理解為一個具有切換視圖并保存視圖棧記錄的一個視圖控制器,在開發中我們應該如何使用呢?那么NavigationController 是一個ViewController 說明我們可以把APP根視圖替換成NavigationController進行路由。下面我們進行簡單代碼示例:

1. 首先修改SceneDeletgate自定義UIWindow和跟視圖實現導航控制器

自定義UIWindow我們需要對info.plist修改一下配置,具體參考之前寫的 Xcode11 后Appdelegate自定義UIWindow對象

// SceneDeletegate.m - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {self.window = [[UIWindow alloc] initWithWindowScene:(UIWindowScene* )scene];self.window.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);// 初始化第一級視圖UIViewController* ROOTVC = [[ViewController alloc] init];// 初始化層級導航控制器UINavigationController* ROOTNavigation = [[UINavigationController alloc]initWithRootViewController:ROOTVC];self.window.rootViewController = ROOTNavigation;// 顯示[self.window makeKeyAndVisible]; }

修改一下第一級視圖的代碼

ViewController.m - (void)viewDidLoad {[super viewDidLoad];// 設置導航欄的顏色self.navigationController.navigationBar.barTintColor = [UIColor whiteColor];// 設置導航欄文字顏色self.navigationController.navigationBar.tintColor = [UIColor grayColor];// 修改本視圖的導航標題self.navigationItem.title = @"首頁";self.view.backgroundColor = [UIColor grayColor]; }

效果:

可以看到上ViewController代碼self.navigationItem進行配置標題、self.navigationController配置顏色風格等。

self.navigationController 是什么?

每個視圖控制器UIViewController都具有navigationController屬性,這個屬性指向是當前視圖的導航控制器對象,也是當前導航控制器下視圖都是指向它,其中一個UIViewController修改了NaviagtionConrtoller的屬性其他視圖層的導航控制器也會發生變化的。

self.navigationItem 是什么?

navigationItem屬性其實是每個視圖的導航欄配置項,可以單獨配置當前的視圖的導航的標題、左右兩邊按鈕、顏色、風格等,只在當前視圖層激活時候才生效。

如何切換視圖 pushViewController

我們可以通過調用NavigationController的方法進行視圖切換,下面簡單演示一下視圖切換功能。

// ViewController.m - (void)viewDidLoad {[super viewDidLoad];// 設置導航欄的顏色self.navigationController.navigationBar.barTintColor = [UIColor whiteColor];// 設置導航欄文字顏色self.navigationController.navigationBar.tintColor = [UIColor grayColor];// 修改本視圖的導航標題self.navigationItem.title = @"首頁";self.view.backgroundColor = [UIColor grayColor];UIButton* _btn = [MyUI createButton:@"跳轉"];_btn.frame = CGMakeRect(100, 100, 40, 100);[_btn addTarget:self action:@selector(go:) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:_btn];}- (void) go {UIViewController* view = [[UIViewController alloc] init][self.navigationController pushViewController:view animated:YES]; }

通過點擊我們看到路由發生了切換和后退等功能。

UINavigationController 屬性

名稱類型說明默認值
topViewControllerUIViewController棧堆中的頂層視圖控制器
visibleViewControllerUIViewController返回當前激活(即顯示)的視圖控制器,如果不存在激活的視圖,則返回棧堆中頂層的視圖控制器
viewControllersNSArray<__kindof UIViewController *>當前導航控制器的視圖棧堆[]
navigationBarHiddenBOOL隱藏導航欄NO
navigationBarUINavigationBar導航控制器的導航欄對象UINavigationBar
toolbarHiddenBOOL隱藏工具欄YES
toolbarUIToolbar導航控制器工具欄對象UIToolbar

UINavigationController 方法

  • - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 是否開啟動畫切換視圖,并且壓入導航棧堆。

  • - (nullable UIViewController *)popViewControllerAnimated:(BOOL)animated; 從棧堆彈出當前視圖。并且返回剩余的視圖棧堆

  • - (nullable NSArray<__kindof UIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated 彈出視圖棧堆,直到指定的視圖控制器前面

  • - (nullable NSArray<__kindof UIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated 直接恢復到頂級視圖層。

  • - (void)setViewControllers:(NSArray<UIViewController *> *)viewControllers animated:(BOOL)animated API_AVAILABLE(ios(3.0)) 直接設置新的視圖棧堆,會跟當前頂級視圖狀態和新的視圖棧堆來執行后退還是前進。

  • - (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated 隱藏導航欄

  • - (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated隱藏工具欄

…后續補充更多內容

總結

以上是生活随笔為你收集整理的IOS 多层级路由导航控制器 NavigationControoller 实现路由切换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。