iOS學習之UINavigationController詳解與使用(一)新增UIBarButtonItem

chenyxh2005發表於2014-12-06

1、UINavigationController導航控制器如何使用

UINavigationController可以翻譯為導航控制器,在iOS裡經常用到。

我們看看它的如何使用:

下面的圖顯示了導航控制器的流程。最左側是根檢視,當使用者點選其中的General項時 ,General檢視會滑入螢幕;當使用者繼續點選Auto-Lock項時,Auto-Lock檢視將滑入螢幕。相應地,在物件管理上,導航控制器使用了導航堆疊。根檢視控制器在堆疊最底層,接下來入棧的是General檢視控制器和Auto-Lock檢視控制器。可以呼叫pushViewControllerAnimated:方法將檢視控制器推入棧頂,也可以呼叫popViewControllerAnimated:方法將檢視控制器彈出堆疊。

上圖來自蘋果官網。


2、UINavigationController的結構組成

看下圖,UINavigationController有Navigation bar  ,Navigation View ,Navigation toobar等組成。


現在我們建立一個例子,看看如何使用UINavigationController

3、新建一個專案

命名為UINavigationControllerDemo,為了更好理解UINavigationController,我們選擇Empty Application模板


4、建立一個View Controller,命名為RootViewController:依次選擇File——New——New File,預設勾上With XIB for user interface.


選擇正確位置建立完成,這時專案裡多了三個檔案,分別是RootViewController.h RootViewController.m RootViewController.xib檔案。

開啟RootViewController.xib,新增一個按鈕控制元件,按鈕Button改成 :Goto SecondView,為跳轉做準備


5、開啟AppDelegate.h,向其中新增屬性:

  1. @property (strong, nonatomic) UINavigationController *navController;  

新增後AppDelegate.h檔案程式碼如下:

  1. #import <UIKit/UIKit.h>  
  2.   
  3. @class ViewController;  
  4.   
  5. @interface AppDelegate : UIResponder <UIApplicationDelegate>  
  6.   
  7. @property (strong, nonatomic) UIWindow *window;  
  8.   
  9. @property (strong, nonatomic) ViewController *viewController;  
  10.   
  11. @property (strong, nonatomic) UINavigationController *navController;  
  12.   
  13. @end  

6、在AppDelegate.m 檔案的didFinishLaunchingWithOptions方法中建立新增navController,RootViewController檢視。

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. {  
  3.     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  
  4.     RootViewController *rootView = [[RootViewController alloc] init];  
  5.     rootView.title = @"Root View";  
  6.       
  7.     self.navController = [[UINavigationController alloc] init];  
  8.     [self.navController pushViewController:rootView animated:YES];  
  9.     [self.window addSubview:self.navController.view];  
  10.     [self.window makeKeyAndVisible];  
  11.     return YES;  
  12. }  
給rootView的titie命名為 Root View,好識別View直接的切換關係。用pushViewController把rootView加入到navController的檢視棧中。

7、現在Root檢視新增完成

看看效果:

'

現在還沒有Navigation bar 。只有title。

8、新增UIBarButtonItem

bar ButtonItem分左右UIBarButtonItem。我們把左右的都新增上去。

在RootViewController.m中新增程式碼如下:

  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.   
  5.     UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(selectLeftAction:)];  
  6.     self.navigationItem.leftBarButtonItem = leftButton;  
  7.       
  8.     UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd  target:self action:@selector(selectRightAction:)];  
  9.     self.navigationItem.rightBarButtonItem = rightButton;<p class="p1">}</p>  
這樣新增了UIBarButtonItem了,效果如下:



這裡重點介紹下

UIBarButtonItem *leftButton = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemActiontarget:selfaction:@selector(selectLeftAction:)];

UIBarButtonSystemItemAction的風格,這是系統自帶的按鈕風格,看下圖,你不用一個個試驗,你也知道想用那個item,如下圖:


9、響應UIBarButtonItem的事件的實現

我們在 action:@selector(selectLeftAction:);

action新增了selectLeftAction和selectRightAction

在RootViewController.m檔案中新增程式碼實現:

  1. -(void)selectLeftAction:(id)sender  
  2. {  
  3.     UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"你點選了導航欄左按鈕" delegate:self  cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];  
  4.     [alter show];  
  5. }  
  6.   
  7. -(void)selectRightAction:(id)sender  
  8. {  
  9.     UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"你點選了導航欄右按鈕" delegate:self  cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];  
  10.     [alter show];  
  11. }  
這樣在點選左右的UIBarButtonItem時,彈出提示:



這篇先講新增UIBarButtonItem,下篇講解頁面跳轉和新增UISegmentedControl

下篇:iOS學習之UINavigationController詳解與使用(二)頁面切換和segmentedController


例子程式碼:https://github.com/schelling/YcDemo

著作權宣告:本文由http://blog.csdn.net/totogo2010/原創,歡迎轉載分享。請尊重作者勞動,轉載時保留該宣告和作者部落格連結,謝謝

相關文章