UINavigationControl
2015-08-15 20:46
411 查看
1.navigationBar导航条,可以用setBackgroundImage方法设置背景图片,当然图片多了可以使用clipsToBounds剪裁. 这点和UIView一样。
2.但,navigationBar是否隐藏和显示这个需要它爸也就是self.navigationController来控制,有直接.navigationBarHidden设置为YES/NO,也可以用方法setNavigationBarHidden,都能实现效果。
3.另一个重要的知识是对navigationItem的设置,这个属性和navigationController是平级的,所以直接可以用self.navigationItem使用。当然可用的有设置导航条标题的方法setTitle,当然你也可以直接把文字换成一个视图,即所谓的标题视图放在导航条的中间,用得方法是setTitleView
4.最重要的可能是给navigationItem设置左右两边的按钮,一般默认的在左边有“返回”,在右边的有“摄像头”(如微信朋友圈)。步骤就是创建一个UIBarButtonItem对象,然后直接把这个对象赋值给self.navigationItem.leftBarButtonItem或者右边的。当然也可以一次创建很多个UIBarButtonItem组成一个数组,然后把这个数组赋值给self.navigationItem.leftBarButtonItems,注意后面这个和前面这个相比,多了一个“s”,有很多个。也要注意一下有多个按钮时的排列顺序。显示顺序,左边:按数组顺序从左向右;右边:按数组顺序从右向左
5.自定义UIBarButtonItem UIBarButtonItem *barBtn4=[[UIBarButtonItem alloc]initWithCustomView:view4];
6.我们也可以在子页中自定义一个返回按钮覆盖原先的"<back"
UIBarButtonItem *barBtn5=[[UIBarButtonItem alloc]initWithTitle:@"回家" style:UIBarButtonItemStylePlain target:self action:@selector(backTo)];
self.navigationItem.leftBarButtonItem=barBtn5;
7. 每一个UIViewController对象里面都有一个指向导航控制器的指针,用以方便的获取它的导航控制器
我们可以猜想,导航控制器对子视图控制器是强引用,而子视图控制器又有一个指针指向导航控制器,这个指针虽然指向了导航控制器,但它是弱引用
8.[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header_bg64.png"] forBarMetrics:UIBarMetricsDefault];
//图片太大会把状态栏充满。
9. 设置横屏下在导航条背景图片
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header_bg64"] forBarMetrics:UIBarMetricsCompact];
// navBg-32.png
给导航条增加背景图片,其中forBarMetrics有点类似于按钮的for state状态,即什么状态下显示
UIBarMetricsDefault-竖屏横屏都有,横屏导航条变宽,则自动repeat图片
UIBarMetricsCompact-竖屏没有,横屏有,相当于之前老iOS版本里地UIBarMetricsLandscapePhone
UIBarMetricsCompactPrompt和UIBarMetricsDefaultPrompt暂时不知道用处,官方解释是Applicable only in bars with the prompt property, such as UINavigationBar and UISearchBar,以后遇到时再细说
10. self.navigationController.navigationBar.backgroundColor = [UIColor purpleColor]; // 可以用,但是效果不好,受是否透明和self.view.backgroundColor的影响。
if (kIOS7) {
self.navigationController.navigationBar.barTintColor = [UIColor purpleColor];
//不受是否半透明和self.view.backgroundColor的影响。
} else {
self.navigationController.navigationBar.tintColor = [UIColor purpleColor];
//和navigationBar.backgroundColor一样易受影响
}
设置是否透明
self.navigationController.navigationBar.translucent = NO;
设置barStyle
注意,barStyle会影响到状态栏的显示
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
11. title属性
如果没有自定制返回按钮,下一个视图控制器的返回标题就是本控制的title
如果title过分长,那下一个控制器的返回标题还是back
跳转后实现下一界面SecondViewControl的title改变 必须在跳转之前改变self.title
self.title = @"Root"; (self是viewControl)
12. 返回按钮需要注意的地方:
A —— push -—> B
.1 如果B视图控制器有一个自定义的左侧按钮(leftBarButtonItem),则会显示这个自定义按钮, 要自己实现返回操作;
.2 如果B没有自定义按钮,但是A视图的backBarButtonItem属性有自定义项,则显示这个自定义项
.3 如果前2条都没有,则默认显示一个后退按钮,后退按钮的标题是A视图的标题(注意当文字过长的时候,下一页的返回按钮就不会是当前的back,则会默认显示back), 如果没有标题,则默认有一个back
如果即想要系统的返回箭头,又想只改变其标题怎么办?
A -> PUSH -> B
解决办法1. 可以把一张图放到button上,然后设置leftBarButtonItem, 一般都是这么处理的
解决办法2(歪门斜道). 设置上一个视图控制器(A)的backBarButtonItem
B *b = [B alloc];
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"回去!" style:UIBarButtonItemStylePlain target:nil action:nil];
[self.navigationItem setBackBarButtonItem:backItem];
[backItem release];
[self.navigationController pushViewController:b animated:YES];
如果不用系统的返回箭头,用自己的图片当作返回箭头 怎么办?
不能不能用 UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back.png"] style:UIBarButtonItemStylePlain
target:nil action:nil]; 这个没有用处
应该用:
[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"back.png"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"back.png"]];
而且图片的颜色是由tintColor属性控制的.
13.设置Navigation Bar颜、Item颜色、title颜色
if (IS_IOS_7_Later) {
[[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]]; //iOS后才出现
[[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
} else {
[[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
}
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor blackColor], NSForegroundColorAttributeName, TextFontWithSize(17), NSFontAttributeName, nil]];
2.但,navigationBar是否隐藏和显示这个需要它爸也就是self.navigationController来控制,有直接.navigationBarHidden设置为YES/NO,也可以用方法setNavigationBarHidden,都能实现效果。
3.另一个重要的知识是对navigationItem的设置,这个属性和navigationController是平级的,所以直接可以用self.navigationItem使用。当然可用的有设置导航条标题的方法setTitle,当然你也可以直接把文字换成一个视图,即所谓的标题视图放在导航条的中间,用得方法是setTitleView
4.最重要的可能是给navigationItem设置左右两边的按钮,一般默认的在左边有“返回”,在右边的有“摄像头”(如微信朋友圈)。步骤就是创建一个UIBarButtonItem对象,然后直接把这个对象赋值给self.navigationItem.leftBarButtonItem或者右边的。当然也可以一次创建很多个UIBarButtonItem组成一个数组,然后把这个数组赋值给self.navigationItem.leftBarButtonItems,注意后面这个和前面这个相比,多了一个“s”,有很多个。也要注意一下有多个按钮时的排列顺序。显示顺序,左边:按数组顺序从左向右;右边:按数组顺序从右向左
5.自定义UIBarButtonItem UIBarButtonItem *barBtn4=[[UIBarButtonItem alloc]initWithCustomView:view4];
6.我们也可以在子页中自定义一个返回按钮覆盖原先的"<back"
UIBarButtonItem *barBtn5=[[UIBarButtonItem alloc]initWithTitle:@"回家" style:UIBarButtonItemStylePlain target:self action:@selector(backTo)];
self.navigationItem.leftBarButtonItem=barBtn5;
7. 每一个UIViewController对象里面都有一个指向导航控制器的指针,用以方便的获取它的导航控制器
我们可以猜想,导航控制器对子视图控制器是强引用,而子视图控制器又有一个指针指向导航控制器,这个指针虽然指向了导航控制器,但它是弱引用
8.[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header_bg64.png"] forBarMetrics:UIBarMetricsDefault];
//图片太大会把状态栏充满。
9. 设置横屏下在导航条背景图片
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header_bg64"] forBarMetrics:UIBarMetricsCompact];
// navBg-32.png
给导航条增加背景图片,其中forBarMetrics有点类似于按钮的for state状态,即什么状态下显示
UIBarMetricsDefault-竖屏横屏都有,横屏导航条变宽,则自动repeat图片
UIBarMetricsCompact-竖屏没有,横屏有,相当于之前老iOS版本里地UIBarMetricsLandscapePhone
UIBarMetricsCompactPrompt和UIBarMetricsDefaultPrompt暂时不知道用处,官方解释是Applicable only in bars with the prompt property, such as UINavigationBar and UISearchBar,以后遇到时再细说
10. self.navigationController.navigationBar.backgroundColor = [UIColor purpleColor]; // 可以用,但是效果不好,受是否透明和self.view.backgroundColor的影响。
if (kIOS7) {
self.navigationController.navigationBar.barTintColor = [UIColor purpleColor];
//不受是否半透明和self.view.backgroundColor的影响。
} else {
self.navigationController.navigationBar.tintColor = [UIColor purpleColor];
//和navigationBar.backgroundColor一样易受影响
}
设置是否透明
self.navigationController.navigationBar.translucent = NO;
设置barStyle
注意,barStyle会影响到状态栏的显示
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
11. title属性
如果没有自定制返回按钮,下一个视图控制器的返回标题就是本控制的title
如果title过分长,那下一个控制器的返回标题还是back
跳转后实现下一界面SecondViewControl的title改变 必须在跳转之前改变self.title
self.title = @"Root"; (self是viewControl)
12. 返回按钮需要注意的地方:
A —— push -—> B
.1 如果B视图控制器有一个自定义的左侧按钮(leftBarButtonItem),则会显示这个自定义按钮, 要自己实现返回操作;
.2 如果B没有自定义按钮,但是A视图的backBarButtonItem属性有自定义项,则显示这个自定义项
.3 如果前2条都没有,则默认显示一个后退按钮,后退按钮的标题是A视图的标题(注意当文字过长的时候,下一页的返回按钮就不会是当前的back,则会默认显示back), 如果没有标题,则默认有一个back
如果即想要系统的返回箭头,又想只改变其标题怎么办?
A -> PUSH -> B
解决办法1. 可以把一张图放到button上,然后设置leftBarButtonItem, 一般都是这么处理的
解决办法2(歪门斜道). 设置上一个视图控制器(A)的backBarButtonItem
B *b = [B alloc];
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"回去!" style:UIBarButtonItemStylePlain target:nil action:nil];
[self.navigationItem setBackBarButtonItem:backItem];
[backItem release];
[self.navigationController pushViewController:b animated:YES];
如果不用系统的返回箭头,用自己的图片当作返回箭头 怎么办?
不能不能用 UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back.png"] style:UIBarButtonItemStylePlain
target:nil action:nil]; 这个没有用处
应该用:
[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"back.png"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"back.png"]];
而且图片的颜色是由tintColor属性控制的.
13.设置Navigation Bar颜、Item颜色、title颜色
if (IS_IOS_7_Later) {
[[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]]; //iOS后才出现
[[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
} else {
[[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
}
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor blackColor], NSForegroundColorAttributeName, TextFontWithSize(17), NSFontAttributeName, nil]];
相关文章推荐
- GUI - Web前端开发框架
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 评价ui设计作品好坏的八个标准(界面/交互设计研究)
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 为Yahoo! UI Extensions Grid增加内置的可编辑器
- Cocos2d-x UI开发之文本类使用实例
- PHP的栏目导航程序
- 在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
- UI Events 用户界面事件
- javascript实现当前页导航激活的方法
- 基于jquery固定于顶部的导航响应浏览器滚动条事件
- 基于jQuery UI CSS Framework开发Widget的经验
- jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
- jQuery UI的Dialog无法提交问题的解决方法
- jquery实现导航固定顶部的效果仿蘑菇街