導(dǎo)航控制器 (UINavigationController )
高度:44
組成:UINavigationBar(上) ,NavigationView(中), Navigation toolbar(下) 組成
簡述:可以管理一系列顯示層次性信息的場景。 第一個場景顯示有關(guān)特定主題的高級視圖,第二個場景用于進(jìn)一步描述,第三個場景再進(jìn)一步描述。
過程 : 它會創(chuàng)建一個視圖控制器“?!?棧底是根視圖控制器。當(dāng)用戶在場景之間進(jìn)行切換時候,一次將視圖控制器壓入棧中,并且當(dāng)前場景的視圖控制器位于棧頂。要返回到上一級,導(dǎo)航控制器將彈出棧頂?shù)目刂破鳎瑥亩氐剿旅娴目刂破鳌?
術(shù)語: push (壓入) pop(彈出)來描述導(dǎo)航控制器
present dismiss
modal 出來的控制器 是沒有導(dǎo)航欄的
-(void)buttonClick{ // 彈出窗口的兩種方式
#import "MIONavigationController.h" // 第一種要 導(dǎo)入頭文件
1. 有導(dǎo)航欄
MIONavigationController *nav =[[MIONavigationController alloc] initWithRootViewController:[[MIOSearchVC alloc]init]];
[self presentViewController:nav animated:YES completion:nil];
2. 沒有導(dǎo)航欄
MIOSearchVC *svc = [[MIOSearchVC alloc]init];
[self.navigationController presentViewController:svc animated:YES completion:nil];
}
用戶輸入信息的view 結(jié)束后自動回復(fù)到之前的view 用 presentModalViewController 比較適合
NavigationBar -> Navigationitem -> (UIBarButtonItem) leftBarButtonItem (左邊)
rightBarButtonItem(右邊)
backBarButtonItem
3. 實(shí)例:創(chuàng)建一個導(dǎo)航項(xiàng)
UINavigationItem *navigationItem =[ [ UINavigationItem alloc] init]
4. 創(chuàng)建一個左邊的按鈕
UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initwithTitle:@“編輯” style:UIBarButtonItemStylePlain target:self action:@selector(beginEdit:)];
5. 設(shè)置導(dǎo)航欄內(nèi)容
navigationItem.title = “hello”;
把左邊按鈕添加到導(dǎo)航欄集合中
[navigationItem setLeftBarButtonItem : rightButton];
或者self.navigationItem.rightBarButtonItem = rightButton
titletextAttributes 可以設(shè)置title 部分字體
可以通過titleVIew 屬性 指定一個定制的titleview 指定的frame 不要顯示出界
Navigation toolbar(下)
顯示工具欄
self.navigationController.toolbarHidden = NO ;
■ UINavigationController的使用步驟
? 初始化UINavigationController
? 設(shè)置UIWindow的rootViewController為UINavigationController
■ 根據(jù)具體情況,通過push方法添加對應(yīng)個數(shù)的子控制器
UINavigationController的子控制器
■ UINavigationController以棧的形式保存子控制器
@property(nonatomic,copy) NSArray *viewControllers;
@property(nonatomic,readonly) NSArray *childViewControllers;
■ 使用push方法能將某個控制器壓入棧
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
■ 使用pop方法可以移除控制器
? 將棧頂?shù)目刂破饕瞥?
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
? 回到指定的子控制器
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
? 回到根控制器(棧底控制器)
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
如何修改導(dǎo)航欄的內(nèi)容
■ 導(dǎo)航欄的內(nèi)容由棧頂控制器的navigationItem屬性決定
■
■ UINavigationItem有以下屬性影響著導(dǎo)航欄的內(nèi)容
? 左上角的返回按鈕
@property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;
? 中間的標(biāo)題視圖
@property(nonatomic,retain) UIView *titleView;
? 中間的標(biāo)題文字
@property(nonatomic,copy) NSString *title;
? 左上角的視圖
@property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;
? UIBarButtonItem *rightBarButtonItem 右上角的視圖
@property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;
應(yīng)用實(shí)例:
UINavigationController *nav =[[UINavigationController alloc] init];
//設(shè)置導(dǎo)航欄背景圖片
[ nav.navigationBar setBackgroundImage:[UIImage imageNamed:@“@"mine-setting-icon"”] forBarMetrics: UIBarMetricsDefault]
//設(shè)置導(dǎo)航欄內(nèi)容
self.navigationItem.title = @"我的";
//設(shè)置隨機(jī)背景色
self.view.backgroundColor =[UIColor colorWithRed:arc4random_uniform(100)/100.0 green:arc4random_uniform(100)/100.0 blue:arc4random_uniform(100)/100.0 alpha:1.0];
//(只設(shè)置一個的情況)
//設(shè)置導(dǎo)航欄右邊的按鈕
UIButton *settingButton =[UIButton buttonWithType:UIButtonTypeCustom];
[settingButton setBackgroundImage:[UIImage imageNamed:@"mine-setting-icon"] forState:UIControlStateNormal];
[settingButton setBackgroundImage:[UIImage imageNamed:@"mine-setting-icon-click"] forState:UIControlStateHighlighted];
settingButton.size = settingButton.currentBackgroundImage.size;
[settingButton addTarget:self action:@selector(settingClick) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:settingButton];
——————————————————————————————————————————————————————
//(設(shè)置兩個情況)
UIButton *settingButton =[UIButton buttonWithType:UIButtonTypeCustom];
[settingButton setBackgroundImage:[UIImage imageNamed:@"mine-setting-icon"] forState:UIControlStateNormal];
[settingButton setBackgroundImage:[UIImage imageNamed:@"mine-setting-icon-click"] forState:UIControlStateHighlighted];
settingButton.size = settingButton.currentBackgroundImage.size;
[settingButton addTarget:self action:@selector(settingClick) forControlEvents:UIControlEventTouchUpInside];
UIButton *settingButton2 =[UIButton buttonWithType:UIButtonTypeCustom];
[settingButton2 setBackgroundImage:[UIImage imageNamed:@"mine-setting-icon"] forState:UIControlStateNormal];
[settingButton2 setBackgroundImage:[UIImage imageNamed:@"mine-setting-icon-click"] forState:UIControlStateHighlighted];
settingButton2.size = settingButton2.currentBackgroundImage.size;
[settingButton2 addTarget:self action:@selector(setting2Click) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItems = @[
[UIBarButtonItem alloc]initWithCustomView:settingButton],
[UIBarButtonItem alloc]initWithCustomView:setting2Button]
];
——————————————————————————————————————————————————————
6. 隱藏導(dǎo)航欄
self.navigationController.navigationBar.hidden = YES;
self.navigationController.navigationBarHidden = YES;
[self.navigationController setNavigationBarHidden:YES animated:NO];
#import "UIBarButtonItem+MIOExtension.h"
7. 快速創(chuàng)建 按鈕
self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithImage:@"MainTagSubIcon"highImage:@"MainTagSubIconClick" target:self action:@selector(tagClick)];