文件目錄以下:基本導航順序: root -> First -> Second -> Third。其中,FirstViewController做爲 navigation堆棧的rootviewhtml
一、建立navigation。post
若是是想直接把navigation導航做爲項目一開始的跟視圖,把RootViewController.h文件裏的nav屬性放到AppDelegate.h裏便可,再把RootViewController.m文件裏的action的代碼複製到 AppDelegate.m裏的didFinishLaunchingWithOptions 方法裏,最後把 self.window.rootViewController 設置 UINavigationController類型的屬性nav便可flex
在RootViewController.h文件atom
1 #import <UIKit/UIKit.h> 2 @class FirstViewController; 3 4 @interface RootViewController : UIViewController 5 6 @property (strong, nonatomic) UINavigationController *nav; 7 8 - (IBAction)btnClick:(UIButton *)sender; 9 10 @end
在RootViewController.m 文件裏的隨意一個自定義action裏:spa
1 - (IBAction)btnClick:(UIButton *)sender { 2 3 //建立一個viewcontroller 4 FirstViewController *fristview =[[[FirstViewController alloc] init] autorelease]; 5 6 7 //初始化UINavigationController(方式一) 8 self.nav = [[[UINavigationController alloc] initWithRootViewController:fristview] autorelease]; 9 10 11 //初始化UINavigationController(方式二) 12 // self.nav = [[[UINavigationController alloc] init] autorelease]; 13 // [self.nav pushViewController:fristview animated:YES]; 14 15 16 //初始化UINavigationController(方式三,失敗,xib文件加載失敗,緣由暫時不明) 17 // self.nav = [[[UINavigationController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease]; 18 19 20 //跳轉到FirstView頁面 21 [self presentViewController:self.nav animated:YES completion:nil]; 22 23 24 //這種寫法通常用於往view裏添加一些小控件,如button label textField之類的,不適宜用於頁面跳轉 25 // [self.view addSubview:self.nav.view]; 26 27 28 }
二、設置viewcontroller的navigationItem屬性和 toolbar、toolbarItemcode
(1)firstViewcontroller的navigation屬性和toolbarItem屬性。代碼在firstviewcontroller.m的viewdidLoad方法裏htm
每一個viewcontroller都有一個navigationItem屬性(只在被加載到導航堆棧裏纔有效),navigationItem屬性裏又有5個屬性:UIBarButtonItem類型的leftBarButtonItem、rightBarButtonItem和backBarButtonItem,NSString類型的title(或者viewcontroller屬性的titleView)、prompt。blog
1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 // Do any additional setup after loading the view from its nib. 5 6 //下面兩句代碼的效果同樣,但貌似設置了navigationItem.title 後 title就會被不起做用了 7 self.navigationItem.title = @"首頁123"; 8 self.title = @"首頁"; 9 10 //在title上面再加多一行,但這樣子就會形成導航欄的寬度變寬 11 // self.navigationItem.prompt = @"prompt"; 12 13 //設置rightbarbuttonitem 14 UIBarButtonItem *rightbar = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(btnClick:)] autorelease]; 15 16 self.navigationItem.rightBarButtonItem = rightbar; 17 18 //修改backbarbuttonitem的title.這個backbarbutton是顯示在下一個push進來的view的tabbar的左邊的 19 //action能夠設置爲nil,這是的動做就是默認的動做,也就是返回到這個view 20 self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:nil] autorelease]; 21 22 23 24 //設置toolbar是否可見(對整個navigation堆棧裏的view起做用,起全局做用) 25 self.navigationController.toolbarHidden = NO; 26 27 UIBarButtonItem *three = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:nil action:nil]; 28 UIBarButtonItem *four = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:nil action:nil]; 29 UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 30 31 //toolbar是整個navigation堆棧裏的view共同的,但toolbar上面的items倒是每一個view單獨擁有的 32 //如今只是設置了當前view的toolbaritem,與其餘view的toolbaritme是沒有關係的 33 [self setToolbarItems:[NSArray arrayWithObjects:flexItem, three, flexItem, four, flexItem, nil]]; 34 35 [three release]; 36 [four release]; 37 [flexItem release]; 38 39 40 }
頁面效果以下:three
(2)、secondviewcontroller的navigationItem和toolbarItemget
代碼在viewdidLoad方法裏
1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 // Do any additional setup after loading the view from its nib. 5 6 //設置左右barbutton 7 UIBarButtonItem *rightbar = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(gotoThird:)] autorelease]; 8 9 UIBarButtonItem *leftbar = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(gotoThird:)] autorelease]; 10 11 self.navigationItem.rightBarButtonItem = rightbar; 12 self.navigationItem.leftBarButtonItem = leftbar; 13 14 //當前view在navigation堆棧裏不是rootview,因此把該viewpush到navigation堆棧裏時,tabbar左邊會顯示backbarbutton 15 //若是給當前view設置了leftbarbutton,會把把backbarbutton覆蓋掉,想同時顯示二者,需以下設置: 16 self.navigationItem.leftItemsSupplementBackButton = YES; 17 18 19 20 //設置當前view的toolbar可見.由於有可能從一個toolbar不可見的view導航到當前view 21 self.navigationController.toolbarHidden = NO; 22 23 }
效果以下:
(3)、thirdviewcontroller的navigationItem和toolbaritem
1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 self.title = @"第三頁"; 5 // Do any additional setup after loading the view from its nib. 6 7 //隱藏當前view的toolbar 8 self.navigationController.toolbarHidden = YES; 9 10 //設置toolbar 11 UIBarButtonItem *rightbar = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(goToRootView)] autorelease]; 12 13 self.navigationItem.rightBarButtonItem = rightbar; 14 15 // NSArray *array = @[@"排骨", @"牛排"]; 16 17 //設置titleview,會覆蓋title 18 UISegmentedControl *segment = [[[UISegmentedControl alloc] initWithItems:@[@"排骨", @"牛扒"] ] autorelease]; 19 segment.segmentedControlStyle = UISegmentedControlSegmentCenter; 20 21 self.navigationItem.titleView = segment; 22 }
效果以下:
barButtonItem的style及效果對應以下: