iOS-UINavigationController的学习
来源:互联网 发布:地府淘宝商 编辑:程序博客网 时间:2024/05/22 05:08
UINavigationController
一、认识导航控制器
导航控制器常用属性:
1.UIViewController *topViewController;获取到在栈中最顶层的视图控制器
2.UIViewController *visibleViewController;获取到在栈中当前显示的视图控制器
3.NSArray *viewControllers;在栈中当前视图控制器
4.BOOL navigationBarHidden;隐藏导航栏,默认是不隐藏,NO
5.UINavigationBar *navigationBar;获取到导航栏目
常用方法:
1.initWithRootViewController:初始化一个视图控制器,在栈的最底层
2.pushViewController:压入到一个新的视图控制器中,在栈的最顶层
3.popViewControllerAnimated:弹出一个视图控制器
4.popToViewController:弹出到指定的视图控制器
5.popToRootViewControllerAnimated:回到根视图控制器
内存管理:一旦出栈,将被立即释放内存
一个导航控制器一般包含有四个对象:UINavigationController、UINavigationBar、UIViewController、UINavigationItem;其中,UINavigationItem存放在UINavigationBar上。
注意:1. 一个导航控制器包含多个视图控制器;
2. 一个视图控制器控制一个UINavigationItem(注意,item既不是由navigationController控制,也不是由navigationBar控制,而是由当前视图UIViewController来控制);
3. 一个导航控制器控制一个UINavigationBar(一个UINavigationController只有一个navigationBar)。
UINavigationItem:title、backBarButtonItem、leftBarButtonItem、rightBarButtonItem、titleView ...
UINavigationBar:backItem、delegate、topItem、translucent(透明) ...
二、定制导航栏
1.定制标题视图
通过NavigationItem的titleView属性,定制标题视图。titleView属性是一个视图类,因此可以添加一个UIView的实例,也可以添加UIView的子类,也可以在UIView的实例中添加子视图。
UIView *cView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, 44)];
cView = [UIColor redColor];
self.navigationItem.titleView = cView;
[cView release];
或者,也许你想用一张图片作为标题:
UIImageView *titleImg = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"img_icon_title.png"]];
self.navigationItem.titleView = titleImg;
2.定制左、右栏目
通过对导航栏的结构,我们了解到NavigationItem实例中有一个leftBarButtonItem和rightBarButtonItem,而这两个属性又是一个UIBarButtonItem的实例,因此,通过初始化UIBarButtonItem实例,设置导航栏的左、右栏目项。
定制左、右栏目:
UIBarButtonItem类提供了常用的四个初始化方法,通过这些不同的初始化方法,用户可以得到不同风格的Item。如,可以调用系统的定义的Item,也可以调用用户自定义的Item(图片、标题),用户还可以自定义一个视图。
// 初始化一个带图片的UIBarButtonItem实例
- (instancetype)initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action;
// 初始化一个只代标题的UIBarButtonItem实例
- (instancetype)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action;
// 初始化一个UIBarButtonItem的实例,初始化一个系统的Item
- (instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem target:(id)target action:(SEL)action;
// 初始化一个自定义的视图
- (instancetype)initWithCustomView:(UIView *)customView;
3.设置导航栏
#pragma mark - 设置风格
// 设置导航栏的风格为黑色:
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
// 设置导航栏为透明
self.navigationController.navigationBar.translucent = YES;
#pragma mark - 设置颜色
//设置导航栏的颜色
self.navigationController.navigationBar.tintColor = [UIColor redColor];
// 设置自定义颜色,注意每一个颜色的值的范围是0~1之间,最后一个参数是设置透明度
[UIColor colorWithRed:0/255.0 green:125/255.0 blue:122/255.0 alpha:1 ];
// 以图片作为颜色,注意这里是无法设置NavigationBar
[UIColor colorWithPatternImage:[UIImage imageNamed:@"img.png"]];
#pragma mark - 隐藏返回按钮
[self.navigationItem setHidesBackButton:YES];//隐藏ToolBar
[self.navigationController setToolBarHidden:YES animated:YES];
#pragma mark - 设置prompt属性(现在已经基本不用这个了)
导航栏的prompt属性,通过navigationItem来设置,其主要作用是用于提示用户。比如,用户正在请求网络数据时,提示用户数据正在加载。带加载完成后可以将它的值设置为nil,取消提示。// 设置导航栏提示用户的内容
self.navigationItem.prompt = @"正在加载中...";
// 取消提示
self.navigationItem.prompt = nil;
4.设置ToolBar
UIToolbar *toolBar = [[UIToolbaralloc]initWithFrame:CGRectMake(0, 480-44, 320, 44)];
toolBar.barStyle =UIBarStyleBlackTranslucent;//黑色透明
// [self.view addSubview:toolBar];
UIBarButtonItem *addItem = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAddtarget:selfaction:nil];
// 自定义的间隔
UIBarButtonItem *flaxedItem = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpacetarget:selfaction:nil];
flaxedItem.width = 25;
UIBarButtonItem *saveItem = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSavetarget:selfaction:nil];
UIBarButtonItem *searchItem = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSearchtarget:selfaction:nil];
UIBarButtonItem *titleItem = [[UIBarButtonItemalloc]initWithTitle:@"title"style:UIBarButtonItemStyleDonetarget:selfaction:nil];
// 设置间隔
UIBarButtonItem *flaxibleItem = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpacetarget:selfaction:nil];
UIImageView *imageView = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"img.jpg"]];
UIBarButtonItem *imageItem = [[UIBarButtonItemalloc]initWithCustomView:imageView];
NSArray *array = @[addItem, flaxedItem, saveItem, searchItem, titleItem, flaxibleItem, imageItem];
[toolBarsetItems:array];//自定义的toolBar
[self.navigationControllersetToolbarHidden:NOanimated:NO];//navigation上的toolBar
//注意: 错误的写法:[self.navigationController.toolBar setItems:array animated:YES];
[selfsetToolbarItems:array];//正确的写法
6. 设置代理方法
航控制器的委托方法UINavigationControllerDelegate,通过设置代理监听视图控制器的切换。
// 设置代理方法delegate
self.navigationController.delegate =self;
#pragma mark - 5. UINavigationControllerDelegate监听试图控制器的切换
#pragma mark willShowViewController
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
NSLog(@"willShowViewController:%p",viewController);
}
#pragma mark didShowViewController
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
NSLog(@"didShowViewController:%p",viewController);
}
7.自定义导航栏
代码:
// iOS5.0 自定义Bar背景
if ([self.navigationBarrespondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) {
[self.navigationBarsetBackgroundImage:[UIImageimageNamed:@"navigation"]forBarMetrics:UIBarMetricsDefault];
}
- iOS-UINavigationController的学习
- IOS学习七:UINavigationController控件的初步
- iOS--UINavigationController学习笔记
- iOS--UINavigationController学习笔记二
- iOS--UINavigationController学习笔记三
- ios学习:UINavigationController导航
- ios学习:UINavigationController导航
- IOS学习之UINavigationController
- IOS的UINavigationController使用
- ios-UINavigationController 详解
- iOS学习之UINavigationController…
- iOS学习之UINavigationController…
- iOS学习之UINavigationController…
- ios学习之 初识UINavigationController
- iOS学习UI之UINavigationController
- iOS学习笔记15— UINavigationController的学习体会
- iOS学习笔记11-UITabBarController和UInavigationController的结合demo
- ios客户端学习-AppDelegate获取UINavigationController及UIStoryboard
- 利用android proguard混淆代码
- Selenium 高级应用
- js 文本结点
- UVA 11400 Lighting System Design DP
- LNMP环境出现Access Denied 403错误
- iOS-UINavigationController的学习
- 推荐!国外程序员整理的 C++ 资源大全
- java NIO(九) 缓冲区——字节缓冲区&&直接缓冲区
- 杭电-2028 Lowest Common Multiple Plus
- TCP/IP数据报格式
- ViewGroup.LayoutParams
- Android 二级菜单最终版
- sort与qsort函数
- LeetCode Word Break & Word Break II