iOS學(xué)習(xí)之UINavigationController詳解與使用(一)
UINavigationController可以翻譯為導(dǎo)航控制器,在iOS里經(jīng)常用到。
1、UINavigationController導(dǎo)航控制器如何使用
我們看看它的如何使用:
下 面的圖顯示了導(dǎo)航控制器的流程。最左側(cè)是根視圖,當(dāng)用戶點(diǎn)擊其中的General項(xiàng)時(shí) ,General視圖會(huì)滑入屏幕;當(dāng)用戶繼續(xù)點(diǎn)擊Auto-Lock項(xiàng)時(shí),Auto-Lock視圖將滑入屏幕。相應(yīng)地,在對(duì)象管理上,導(dǎo)航控制器使用了導(dǎo) 航堆棧。根視圖控制器在堆棧最底層,接下來入棧的是General視圖控制器和Auto-Lock視圖控制器??梢哉{(diào)用 pushViewControllerAnimated:方法將視圖控制器推入棧頂,也可以調(diào)用popViewControllerAnimated:方 法將視圖控制器彈出堆棧。
上圖來自蘋果官網(wǎng)。
2、UINavigationController的結(jié)構(gòu)組成
看下圖,UINavigationController有Navigation bar ,Navigation View ,Navigation toobar等組成。
現(xiàn)在我們建立一個(gè)例子,看看如何使用UINavigationController
3、新建一個(gè)項(xiàng)目
命名為UINavigationControllerDemo,為了更好理解UINavigationController,我們選擇Empty Application模板
4、創(chuàng)建一個(gè)View Controller,命名為RootViewController:依次選擇File——New——New File,默認(rèn)勾上With XIB for user interface.
選擇正確位置創(chuàng)建完成,這時(shí)項(xiàng)目里多了三個(gè)文件,分別是RootViewController.h RootViewController.m RootViewController.xib文件。
打開RootViewController.xib,添加一個(gè)按鈕控件,按鈕Button改成 :Goto SecondView,為跳轉(zhuǎn)做準(zhǔn)備
5、打開AppDelegate.h,向其中添加屬性:
- @property (strong, nonatomic) UINavigationController *navController;
添加后AppDelegate.h文件代碼如下:
- #import <UIKit/UIKit.h>
- @class ViewController;
- @interface AppDelegate : UIResponder <UIApplicationDelegate>
- @property (strong, nonatomic) UIWindow *window;
- @property (strong, nonatomic) ViewController *viewController;
- @property (strong, nonatomic) UINavigationController *navController;
- @end
6、在AppDelegate.m 文件的didFinishLaunchingWithOptions方法中創(chuàng)建添加navController,RootViewController視圖。
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- {
- self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
- RootViewController *rootView = [[RootViewController alloc] init];
- rootView.title = @"Root View";
- self.navController = [[UINavigationController alloc] init];
- [self.navController pushViewController:rootView animated:YES];
- [self.window addSubview:self.navController.view];
- [self.window makeKeyAndVisible];
- return YES;
- }
給rootView的titie命名為 Root View,好識(shí)別View直接的切換關(guān)系。用pushViewController把rootView加入到navController的視圖棧中。
7、現(xiàn)在Root視圖添加完成
看看效果:
現(xiàn)在還沒有Navigation bar 。只有title。
8、添加UIBarButtonItem
bar ButtonItem分左右UIBarButtonItem。我們把左右的都添加上去。
在RootViewController.m中添加代碼如下:
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(selectLeftAction:)];
- self.navigationItem.leftBarButtonItem = leftButton;
- UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(selectRightAction:)];
- self.navigationItem.rightBarButtonItem = rightButton;<p class="p1">}</p>
這樣添加了UIBarButtonItem了,效果如下:
這里重點(diǎn)介紹下
UIBarButtonItem *leftButton = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemActiontarget:selfaction:@selector(selectLeftAction:)];
UIBarButtonSystemItemAction的風(fēng)格,這是系統(tǒng)自帶的按鈕風(fēng)格,看下圖,你不用一個(gè)個(gè)試驗(yàn),你也知道想用那個(gè)item,如下圖:
9、響應(yīng)UIBarButtonItem的事件的實(shí)現(xiàn)
我們?cè)?nbsp;action:@selector(selectLeftAction:);
action添加了selectLeftAction和selectRightAction
在RootViewController.m文件中添加代碼實(shí)現(xiàn):
- -(void)selectLeftAction:(id)sender
- {
- UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"你點(diǎn)擊了導(dǎo)航欄左按鈕" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
- [alter show];
- }
- -(void)selectRightAction:(id)sender
- {
- UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"你點(diǎn)擊了導(dǎo)航欄右按鈕" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
- [alter show];
- }
這樣在點(diǎn)擊左右的UIBarButtonItem時(shí),彈出提示:
這篇先講添加UIBarButtonItem,下篇講解頁面跳轉(zhuǎn)和添加UISegmentedControl
下篇:iOS學(xué)習(xí)之UINavigationController詳解與使用(二)頁面切換和segmentedController
下篇:iOS學(xué)習(xí)UINavigationController詳解與使用(三)ToolBar
例子代碼:https://github.com/schelling/YcDemo