UINavigationController 是 iOS 中用於管理視圖控制器層次結構的一個重要組件,通常用於實現基於堆棧的導航。它提供了一種用戶界面,允許用戶在視圖控制器之間進行層次化的導航,例如從列表視圖到詳細視圖。 UINavigationController 的主要功能 管理視圖控制器堆棧: ...
UINavigationController
是 iOS 中用於管理視圖控制器層次結構的一個重要組件,通常用於實現基於堆棧的導航。它提供了一種用戶界面,允許用戶在視圖控制器之間進行層次化的導航,例如從列表視圖到詳細視圖。
UINavigationController
的主要功能
- 管理視圖控制器堆棧:使用一個堆棧數據結構來管理視圖控制器。堆棧的頂端是當前顯示的視圖控制器。
- 導航欄:在屏幕頂部顯示一個導航欄,通常包含返回按鈕(左端)、標題(中間)和其他控制項(右方)。
- 導航動畫:提供標準的推入(push)和彈出(pop)動畫,增強用戶的導航體驗。
如何使用 UINavigationController
初始化和基本使用
// 在AppDelegate.m中
#import "AppDelegate.h"
#import "RootViewController.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
RootViewController *rootVC = [[RootViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootVC];
self.window.rootViewController = navController;
[self.window makeKeyAndVisible];
return YES;
}
@end
管理視圖控制器堆棧
推入視圖控制器
使用 pushViewController:animated:
方法將一個視圖控制器推入導航堆棧,並顯示它。
UIViewController *newVC = [[UIViewController alloc] init];
newVC.view.backgroundColor = [UIColor whiteColor];
[self.navigationController pushViewController:newVC animated:YES];
彈出視圖控制器
使用 popViewControllerAnimated:
方法將當前視圖控制器從堆棧中移除,並返回到前一個視圖控制器。
[self.navigationController popViewControllerAnimated:YES];
自定義導航欄
設置導航欄標題
可以在視圖控制器中設置導航欄的標題。
self.title = @"Home";
自定義導航欄按鈕
可以在視圖控制器中添加自定義的導航欄按鈕。
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Right" style:UIBarButtonItemStylePlain target:self action:@selector(rightButtonTapped)];
self.navigationItem.rightBarButtonItem = rightButton;
實現按鈕的動作:
- (void)rightButtonTapped {
NSLog(@"Right button tapped");
}
導航欄樣式定製
可以通過 UINavigationBar
的屬性來自定義導航欄的樣式。
設置導航欄顏色
self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; // 設置返回按鈕和其他按鈕的顏色
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor]}; // 設置標題顏色
設置透明導航欄
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.navigationBar.translucent = YES;
處理導航控制器中的返回動作
可以通過實現 UINavigationControllerDelegate
協議來處理導航控制器中的返回動作。
示例:攔截返回按鈕動作
@interface MyViewController () <UINavigationControllerDelegate>
@end
@implementation MyViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.delegate = self;
}
// 實現代理方法
- (BOOL)navigationController:(UINavigationController *)navigationController shouldPopItem:(UINavigationItem *)item {
// 在這裡處理返回按鈕的動作
// 返回 YES 表示允許返回,返回 NO 表示阻止返回
return YES;
}
@end