一、UINavigationController導航控制器如何使用git
UINavigationController能夠翻譯爲導航控制器,在IOS裏常常用到。github
咱們看看它的如何使用:app
下面的圖顯示了導航控制器的流程。最左側是根視圖,當用戶點擊其中的General項時 ,General視圖會滑入屏幕;當用戶繼續點擊Auto-Lock項時,Auto-Lock視圖將滑入屏幕。相應地,在對象管理上,導航控制器使用了導 航堆棧。根視圖控制器在堆棧最底層,接下來入棧的是General視圖控制器和Auto-Lock視圖控制器。能夠調用 pushViewControllerAnimated:方法將視圖控制器推入棧頂,也能夠調用popViewControllerAnimated:方 法將視圖控制器彈出堆棧。atom
上圖來自蘋果官網。spa
二、UINavigationController的結構組成.net
看下圖,UINavigationController有Navigation bar ,Navigation View ,Navigation toobar等組成。翻譯
如今咱們創建一個例子,看看如何使用UINavigationController對象
三、新建一個項目blog
命名爲UINavigationControllerDemo,爲了更好理解UINavigationController,咱們選擇Empty Application模板事件
四、建立一個View Controller,命名爲RootViewController:依次選擇File——New——New File,默認勾上With XIB for user interface.
選擇正確位置建立完成,這時項目裏多了三個文件,分別是RootViewController.h RootViewController.m RootViewController.xib文件。
打開RootViewController.xib,添加一個按鈕控件,按鈕Button改爲 :Goto SecondView,爲跳轉作準備
五、打開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
六、在AppDelegate.m 文件的didFinishLaunchingWithOptions方法中建立添加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,好識別View直接的切換關係。用pushViewController把rootView加入到navController的視圖棧中。
七、如今Root視圖添加完成
看看效果:
'
如今尚未Navigation bar 。只有title。
八、添加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了,效果以下:
這裏重點介紹下
UIBarButtonItem *leftButton = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemActiontarget:selfaction:@selector(selectLeftAction:)];
UIBarButtonSystemItemAction的風格,這是系統自帶的按鈕風格,看下圖,你不用一個個試驗,你也知道想用那個item,以下圖:
九、響應UIBarButtonItem的事件的實現
咱們在 action:@selector(selectLeftAction:);
action添加了selectLeftAction和selectRightAction
在RootViewController.m文件中添加代碼實現:
- -(void)selectLeftAction:(id)sender
- {
- UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"你點擊了導航欄左按鈕" delegate:self cancelButtonTitle:@"肯定" otherButtonTitles:nil, nil];
- [alter show];
- }
-
- -(void)selectRightAction:(id)sender
- {
- UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"你點擊了導航欄右按鈕" delegate:self cancelButtonTitle:@"肯定" otherButtonTitles:nil, nil];
- [alter show];
- }
這樣在點擊左右的UIBarButtonItem時,彈出提示:
這篇先講添加UIBarButtonItem,下篇講解頁面跳轉和添加UISegmentedControl
例子代碼:https://github.com/schelling/YcDemo