UINavigationController,NavigationBar,BarButtonItem 相关



1 #import <UIKit/UIKit.h>
2
3 @interface UIBarButtonItem (Extension)
4 + (UIBarButtonItem *)itemWithImageName:(NSString *)imageName highImageName:(NSString *)highImageName target:(id)target action:(SEL)action;
5 @end
 1 #import "UIBarButtonItem+Extension.h"
 2 #import "UIView+Extension.h"
 3
 4 @implementation UIBarButtonItem (Extension)
 5 + (UIBarButtonItem *)itemWithImageName:(NSString *)imageName highImageName:(NSString *)highImageName target:(id)target action:(SEL)action
 6 {
 7     UIButton *button = [[UIButton alloc] init];
 8     [button setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
 9     [button setBackgroundImage:[UIImage imageNamed:highImageName] forState:UIControlStateHighlighted];
10
11     // 设置按钮的尺寸为背景图片的尺寸
12     button.size = button.currentBackgroundImage.size;
13
14     // 监听按钮点击
15     [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
16     return [[UIBarButtonItem alloc] initWithCustomView:button];
17 }
18 @end
1 #import <UIKit/UIKit.h>
2
3 @interface KKNavController : UINavigationController
4
5 @end
  1 #import "KKNavController.h"
  2 #import "UIBarButtonItem+Extension.m"
  3
  4 @interface KKNavController ()
  5
  6 @end
  7
  8 @implementation KKNavController
  9
 10 /**
 11  *  当第一次使用这个类的时候调用1次
 12  */
 13 + (void)initialize
 14 {
 15     // 设置UINavigationBarTheme的主
 16     [self setupNavigationBarTheme];
 17
 18     // 设置UIBarButtonItem的主题
 19     [self setupBarButtonItemTheme];
 20 }
 21
 22 /**
 23  *  设置UINavigationBarTheme的主题
 24  */
 25 + (void)setupNavigationBarTheme
 26 {
 27     UINavigationBar *appearance = [UINavigationBar appearance];
 28
 29     // 设置导航栏背景
 30 //    if (!iOS7) {
 31 //        [appearance setBackgroundImage:[UIImage imageWithName:@"navigationbar_background"] forBarMetrics:UIBarMetricsDefault];
 32 //    }
 33
 34     // 设置文字属性
 35     NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];
 36     textAttrs[UITextAttributeTextColor] = [UIColor blackColor];
 37     // UITextAttributeFont  --> NSFontAttributeName(iOS7)
 38 #warning 过期 : 并不代表不能用, 仅仅是有最新的方案可以取代它
 39     textAttrs[UITextAttributeFont] = [UIFont systemFontOfSize:25];
 40     // UIOffsetZero是结构体, 只要包装成NSValue对象, 才能放进字典\数组中
 41     textAttrs[UITextAttributeTextShadowOffset] = [NSValue valueWithUIOffset:UIOffsetZero];
 42     [appearance setTitleTextAttributes:textAttrs];
 43 }
 44
 45 /**
 46  *  设置UIBarButtonItem的主题
 47  */
 48 + (void)setupBarButtonItemTheme
 49 {
 50     // 通过appearance对象能修改整个项目中所有UIBarButtonItem的样式
 51     UIBarButtonItem *appearance = [UIBarButtonItem appearance];
 52
 53     /**设置文字属性**/
 54     // 设置普通状态的文字属性
 55     NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];
 56     textAttrs[UITextAttributeTextColor] = [UIColor orangeColor];
 57     textAttrs[UITextAttributeFont] = [UIFont systemFontOfSize:15];
 58     textAttrs[UITextAttributeTextShadowOffset] = [NSValue valueWithUIOffset:UIOffsetZero];
 59     [appearance setTitleTextAttributes:textAttrs forState:UIControlStateNormal];
 60
 61     // 设置高亮状态的文字属性
 62     NSMutableDictionary *highTextAttrs = [NSMutableDictionary dictionaryWithDictionary:textAttrs];
 63     highTextAttrs[UITextAttributeTextColor] = [UIColor redColor];
 64     [appearance setTitleTextAttributes:highTextAttrs forState:UIControlStateHighlighted];
 65
 66     // 设置不可用状态(disable)的文字属性
 67     NSMutableDictionary *disableTextAttrs = [NSMutableDictionary dictionaryWithDictionary:textAttrs];
 68     disableTextAttrs[UITextAttributeTextColor] = [UIColor lightGrayColor];
 69     [appearance setTitleTextAttributes:disableTextAttrs forState:UIControlStateDisabled];
 70
 71     /**设置背景**/
 72     // 技巧: 为了让某个按钮的背景消失, 可以设置一张完全透明的背景图片
 73 //    [appearance setBackgroundImage:[UIImage imageWithName:@"navigationbar_button_background"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
 74 }
 75
 76 /**
 77  *  能拦截所有push进来的子控制器
 78  */
 79 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
 80 {
 81     if (self.viewControllers.count > 0) { // 如果现在push的不是栈底控制器(最先push进来的那个控制器)
 82         viewController.hidesBottomBarWhenPushed = YES;
 83
 84         // 设置导航栏按钮
 85         viewController.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithImageName:@"navigationbar_back" highImageName:@"navigationbar_back_highlighted" target:self action:@selector(back)];
 86         viewController.navigationItem.rightBarButtonItem = [UIBarButtonItem itemWithImageName:@"navigationbar_more" highImageName:@"navigationbar_more_highlighted" target:self action:@selector(more)];
 87     }
 88     [super pushViewController:viewController animated:animated];
 89 }
 90
 91 - (void)back
 92 {
 93 #warning 这里用的是self, 因为self就是当前正在使用的导航控制器
 94     [self popViewControllerAnimated:YES];
 95 }
 96
 97 - (void)more
 98 {
 99     [self popToRootViewControllerAnimated:YES];
100 }
101
102
103 - (void)viewDidLoad {
104     [super viewDidLoad];
105     // Do any additional setup after loading the view.
106 }
107
108 - (void)didReceiveMemoryWarning {
109     [super didReceiveMemoryWarning];
110     // Dispose of any resources that can be recreated.
111 }
112
113 /*
114 #pragma mark - Navigation
115
116 // In a storyboard-based application, you will often want to do a little preparation before navigation
117 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
118     // Get the new view controller using [segue destinationViewController].
119     // Pass the selected object to the new view controller.
120 }
121 */
122
123 @end
时间: 2024-10-10 00:36:17

UINavigationController,NavigationBar,BarButtonItem 相关的相关文章

UINavigationController与UITabBarController相关问题

UINavigationController与UITabBarController相关问题 UINavigationController与UITabBarController混用是非常常见的,有时候会遇到UINavigationController推出(push)出controller后隐藏UITabBarController的问题,很容易对吧. 源码如下: // // AppDelegate.m // NavigationController // // Copyright (c) 2014年

IOS:UI设计之UINavigationController,NavigationBar,ToolBAR相关基础

基本概念:导航视图控制器(UINavigationController)是用于构建分层应用程序的主要工具,管理着多个内容视图的换入和换出,并且自身提供了视图切换的动画效果(例如:相册,QQ,微信等APP应用). 它的父类是UIViewController,是所有视图控制器的基类,导航控制器以栈的形式来实现,其本身也属于视图控制器. 下图是UINavigationController的分层结构图: UINavigationController view层级 栈的基本概念与性质: 栈是一种数据结构,

UINavigationController navigationBar 隐藏方法

// 隐藏navigationBar 没有卡顿    [self.navigationController setNavigationBarHidden:YES animated:YES];    // 隐藏navigationBar 切换页面时,有卡顿//    self.navigationController.navigationBarHidden = YES;

Swift 设置navigationbar属性相关

1 //设置导航栏颜色 2 let mainColor = UIColor(red: 0.92, green: 0.25, blue: 0.24, alpha: 1) 3 self.navigationController?.navigationBar.barTintColor = mainColor 4 self.navigationController?.navigationBar.tintColor =UIColor.whiteColor() 5 6 //设置标题颜色 7 let navi

如何控制android系统中NavigationBar 的显示与隐藏

我们使用的大多数android手机上的Home键,返回键以及menu键都是实体触摸感应按键.如果你用Google的Nexus4或Nexus5话,你会发现它们并没有实体按键或触摸感应按键,取而代之的是在屏幕的下方加了一个小黑条,在这个黑条上有3个按钮控件,这种设置无疑使得手机的外观的设计更加简约.但我遇到身边用Nexus 4手机的人都吐槽这种设计,原因很简单:好端端的屏幕,被划出一块区域用来显示3个按钮(如下图所示):Back, Home, Recent.并且它一直用在那里占用着. 在androi

UINavigationController与UITabbarController的样式

之前虽然也手写过这两中视图控制器,但是更多的还是使用SB来创建,最近发现了一些问题,现在总结一下. 1.改变UINavigationBar的颜色 在UINavigationController中,之前只需要设置UINavigationController.navigationBar.tintColor 就可以改变navigationBar的颜色了,在最新的API中苹果对这个属性就行了修改了. 添加了一个属性barTintColor,以前的tintColor不再对bar的颜色产生影响,改变颜色需要

OC开发_Storyboard——iPad开发

iPad开发(Universal Applications) 一.iPad 1.判断是否在iPad上 BOOL iPad = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad); 二.UISplitViewController 分割视图控制器 1.UISplitViewController 分割视图控制器(顶级视图,不能放在Nav或者其他视图中) (1  可以通过 if (self.splitVie

iPad开发(Universal Applications)

一.iPad 1.判断是否在iPad上 BOOL iPad = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad); 二.UISplitViewController 分割视图控制器 1.UISplitViewController 分割视图控制器(顶级视图,不能放在Nav或者其他视图中) (1  可以通过 if (self.splitViewController) 判断是否是分割视图中 @proper

UINavigationController的navigationBar的常用设置(按钮,标题,颜色)

http://blog.csdn.net/u010229677白白手游专栏 使用: ViewController* vc = [[ViewController alloc] init]; self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:vc]; self.window.backgroundColor = [UIColor whiteColor]; [self.w