iOS开发项目篇—13标题栏设置

iOS开发项目篇—13标题栏设置

一、添加标题栏

代码:

 1 #import "YYHomeTableViewController.h"
 2 #import "YYOneViewController.h"
 3
 4 @interface YYHomeTableViewController ()
 5
 6 @end
 7
 8 @implementation YYHomeTableViewController
 9
10 - (id)initWithStyle:(UITableViewStyle)style
11 {
12     self = [super initWithStyle:style];
13     if (self) {
14         // Custom initialization
15     }
16     return self;
17 }
18
19 - (void)viewDidLoad
20 {
21     [super viewDidLoad];
22
23     //设置导航栏的按钮
24     self.navigationItem.leftBarButtonItem=[UIBarButtonItem itemWithImageName:@"navigationbar_friendsearch" highImageName:@"navigationbar_friendsearch_highlighted" target:self action:@selector(friendsearch)];
25     self.navigationItem.rightBarButtonItem=[UIBarButtonItem itemWithImageName:@"navigationbar_pop" highImageName:@"navigationbar_pop_highlighted" target:self action:@selector(pop)];
26
27     //设置导航栏按钮
28     UIButton *titleButton=[[UIButton alloc]init];
29     //设置文字
30     [titleButton setTitle:@"首页" forState:UIControlStateNormal];
31     //设置文字颜色为黑色
32     [titleButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
33     //设置图标
34     [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
35     //设置背景
36     [titleButton setBackgroundImage:[UIImage resizedImage:@"navigationbar_filter_background_highlighted"] forState:UIControlStateHighlighted];
37     //当高亮的时候,不调整图片
38     titleButton.adjustsImageWhenHighlighted=NO;
39     //设置尺寸
40     titleButton.width=100;
41     titleButton.height=35;
42     self.navigationItem.titleView=titleButton;
43 }

显示效果:

   

二、进一步实现

(1)要求:要求图标在右边,文字在左边

解决方法:自定义一个类,让其继承自UIButton,重写内部的方法,调整图片和文字的位置。

封装的原则,经常需要设置且不会经常变动的应该封装在方法内部。

自定义类的声明和实现:

 1 //
 2 //  YYTitleButton.m
 3 //
 4
 5 #import "YYTitleButton.h"
 6
 7 @implementation YYTitleButton
 8
 9 - (id)initWithFrame:(CGRect)frame
10 {
11     self = [super initWithFrame:frame];
12     if (self) {
13         //设置图片居中
14         self.imageView.contentMode=UIViewContentModeCenter;
15         //当高亮的时候,不调整图片
16         self.adjustsImageWhenHighlighted=NO;
17         //设置文字对齐方式为右对齐
18         self.titleLabel.textAlignment=NSTextAlignmentRight;
19         //设置文字颜色为黑色
20         [self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
21         //设置文字的字体为统一的20号字体
22         self.titleLabel.font=YYNavigationTitleFont;
23     }
24     return self;
25 }
26
27 //设置内部图标的frame
28 -(CGRect)imageRectForContentRect:(CGRect)contentRect
29 {
30     CGFloat imageY=0;
31     CGFloat imageW=self.height;
32     CGFloat imageH=imageW;
33     CGFloat imageX=self.width-imageW;
34     return CGRectMake(imageX, imageY, imageW, imageH);
35
36 }
37 //设置内部文字的frame
38 -(CGRect)titleRectForContentRect:(CGRect)contentRect
39 {
40     CGFloat titleY=0;
41     CGFloat titleX=0;
42     CGFloat titleH=self.height;
43     //图片为正方形
44     CGFloat titleW=self.width-self.height;
45     return CGRectMake(titleX, titleY, titleW, titleH);
46 }
47
48 @end

在控制器中的使用:

 1 //
 2 //  YYHomeTableViewController.m
 3 //
 4
 5 #import "YYHomeTableViewController.h"
 6 #import "YYOneViewController.h"
 7 #import "YYTitleButton.h"
 8
 9 @interface YYHomeTableViewController ()
10
11 @end
12
13 @implementation YYHomeTableViewController
14
15 - (id)initWithStyle:(UITableViewStyle)style
16 {
17     self = [super initWithStyle:style];
18     if (self) {
19         // Custom initialization
20     }
21     return self;
22 }
23
24 - (void)viewDidLoad
25 {
26     [super viewDidLoad];
27
28     //设置导航栏的按钮
29     self.navigationItem.leftBarButtonItem=[UIBarButtonItem itemWithImageName:@"navigationbar_friendsearch" highImageName:@"navigationbar_friendsearch_highlighted" target:self action:@selector(friendsearch)];
30     self.navigationItem.rightBarButtonItem=[UIBarButtonItem itemWithImageName:@"navigationbar_pop" highImageName:@"navigationbar_pop_highlighted" target:self action:@selector(pop)];
31
32     //设置导航栏按钮
33     YYTitleButton *titleButton=[[YYTitleButton alloc]init];
34     //设置文字
35     [titleButton setTitle:@"首页" forState:UIControlStateNormal];
36     //设置图标
37     [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
38     //设置背景
39     [titleButton setBackgroundImage:[UIImage resizedImage:@"navigationbar_filter_background_highlighted"] forState:UIControlStateHighlighted];
40
41     //设置尺寸
42     titleButton.width=100;
43     titleButton.height=35;
44     self.navigationItem.titleView=titleButton;
45 }
46 -(void)pop
47 {
48     YYLog(@"---POP---");
49 }
50 -(void)friendsearch
51 {
52     //跳转到one这个子控制器界面
53     YYOneViewController *one=[[YYOneViewController alloc]init];
54     one.title=@"One";
55     //拿到当前控制器
56     [self.navigationController pushViewController:one animated:YES];
57
58 }
59
60 #pragma mark - Table view data source
61 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
62 {
63     return 20;
64 }
65
66 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
67 {
68     static NSString *ID = @"cell";
69     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
70     if (!cell) {
71         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
72     }
73     cell.textLabel.text = [NSString stringWithFormat:@"%d----首页测试数据", indexPath.row];
74     return cell;
75 }
76
77 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
78 {
79     //点击cell的时候,跳到下一个界面
80     UIViewController *newVc = [[UIViewController alloc] init];
81     newVc.view.backgroundColor = [UIColor redColor];
82     newVc.title = @"新控制器";
83     [self.navigationController pushViewController:newVc animated:YES];
84 }
85
86 @end

实现效果:

新的问题:设置文字为右对齐,但是如果文字的长度非常长,不止是两个字的话就会影响到显示的效果,更好的做法是在设置尺寸的时候根据标题的长度能够自动设置尺寸。

三、进一步实现

(1)要求:点击标题栏按钮切换箭头的方向

  第一种实现方法:

 1 #import "YYHomeTableViewController.h"
 2 #import "YYOneViewController.h"
 3 #import "YYTitleButton.h"
 4
 5 @interface YYHomeTableViewController ()
 6 @property(nonatomic,assign)BOOL down;
 7 @end
 8
 9 @implementation YYHomeTableViewController
10
11 - (id)initWithStyle:(UITableViewStyle)style
12 {
13     self = [super initWithStyle:style];
14     if (self) {
15         // Custom initialization
16     }
17     return self;
18 }
19
20 - (void)viewDidLoad
21 {
22     [super viewDidLoad];
23
24     //设置导航栏的按钮
25     self.navigationItem.leftBarButtonItem=[UIBarButtonItem itemWithImageName:@"navigationbar_friendsearch" highImageName:@"navigationbar_friendsearch_highlighted" target:self action:@selector(friendsearch)];
26     self.navigationItem.rightBarButtonItem=[UIBarButtonItem itemWithImageName:@"navigationbar_pop" highImageName:@"navigationbar_pop_highlighted" target:self action:@selector(pop)];
27
28     //设置导航栏按钮
29     YYTitleButton *titleButton=[[YYTitleButton alloc]init];
30     //设置文字
31     [titleButton setTitle:@"首页" forState:UIControlStateNormal];
32     //设置图标
33     [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
34     //设置背景
35     [titleButton setBackgroundImage:[UIImage resizedImage:@"navigationbar_filter_background_highlighted"] forState:UIControlStateHighlighted];
36
37     //设置尺寸
38     titleButton.width=100;
39     titleButton.height=35;
40     //监听按钮的点击事件
41     [titleButton addTarget:self action:@selector(titleButtonClick:) forControlEvents:UIControlEventTouchUpInside];
42     self.navigationItem.titleView=titleButton;
43 }
44
45 -(void)titleButtonClick:(UIButton *)titleButton
46 {
47     if (self.down) {
48         //换成箭头向上
49         self.down=NO;
50         [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_up"] forState:UIControlStateNormal];
51     }else
52     {
53         self.down=YES;
54         //换成箭头向下
55         [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
56     }
57 }

缺点:需要增加一个全局的属性(down)用来记录状态

第二种实现方法:

 1 -(void)titleButtonClick:(UIButton *)titleButton
 2 {
 3     if (titleButton.tag==0) {
 4         titleButton.tag=10;
 5         //换成箭头向上
 6         self.down=NO;
 7         [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_up"] forState:UIControlStateNormal];
 8     }else
 9     {
10         titleButton.tag=0;
11         self.down=YES;
12         //换成箭头向下
13         [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
14     }
15 }

缺点:这里使用了tag,虽然不需要添加一个新的属性,但是使用tag引入了魔法数字,不利于阅读。

第三种实现方法:

 1 -(void)titleButtonClick:(UIButton *)titleButton
 2 {
 3     UIImage *titleImage=[UIImage imageWithName:@"navigationbar_arrow_down"];
 4
 5     if (titleButton.currentImage==titleImage) {
 6         //换成箭头向上
 7         [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_up"] forState:UIControlStateNormal];
 8     }else
 9     {
10         //换成箭头向下
11         [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
12     }
13 }

iOS开发项目篇—13标题栏设置

时间: 2024-12-28 00:56:17

iOS开发项目篇—13标题栏设置的相关文章

iOS开发项目篇—05主题设置

iOS开发项目篇—05主题设置 一.实现效果 1.效果图示 注意查看界面的导航栏 消息界面导航栏上的“写消息” 发现界面上的“系统设置” “我”界面上德“设置” 2.实现说明 (1)适配IOS6和IOS7,要求导航标题栏和上面的按钮的设置基本一致. (2)导航栏上德按钮,设置三种状态,默认状态下为橙色,不可用状态下为高亮灰色,点击(高亮)状态下为红色. (3)设置导航栏上的按钮,有两种方式 第一种:下面是消息页面添加“写私信”的代码,可以在每次需要类似设置的时候都拷贝这样的代码. 1 //第一种

iOS开发项目篇—04添加导航栏的按钮

iOS开发项目篇—04添加导航栏的按钮 一.设置导航栏的按钮 要求实现的效果:             说明:默认状态下和高亮状态下的图片是不一样的. 按钮的图片需要设置默认状态和高亮状态时的显示,系统了提供的下面方法 viewController.navigationItem.leftBarButtonItem=[UIBarButtonItem alloc]initWithImage:<#(UIImage *)#> style:<#(UIBarButtonItemStyle)#>

iOS开发项目篇—54&quot;设置&quot;界面的搭建

iOS开发项目篇—54"设置"界面的搭建 一.实现 新建一个设置控制器,当点击“我”控制器导航栏“设置”按钮时,即跳转到该界面 1.在“我”控制器中对导航栏“设置按钮”的处理 1 // 2 // YYProfileViewController.m 3 // 4 5 #import "YYProfileViewController.h" 6 #import "YYCommonGroup.h" 7 #import "YYCommonItem

iOS开发项目篇—50设置cell的背景

iOS开发项目篇—50设置cell的背景 一.简单说明 当前样式: 1.去掉分隔线 2.设置背景图片(新浪提供了四种图片,底部的图片有阴影) cell的四种背景图 问题:cell怎么知道自己当前是处在第几组的第几行? 在自定义cell中提供一个方法,共外界传递当前的组和行 YYCommonCell.h文件 1 // 2 // YYCommonCell.h 3 // 4 5 #import <Foundation/Foundation.h> 6 @class YYCommonItem; 7 @i

iOS开发项目篇—28自定义UITextView

iOS开发项目篇—28自定义UITextView 一.简单说明 1.要实现的效果 2.分析 (1)UITextField 1.最多只能输入一行文字 2.能设置提醒文字(placehoder) 3.不具备滚动功能 (2)UITextView 1.能输入N行文字(N>0) 2.不能设置提醒文字(没有placehoder属性) 3.具备滚动功能 需求:技能输入多行文字,又具备文字提醒功能. 这里选择自定义一个类,让其继承自UITextView类,为其添加一个设置文字提醒的功能. 二.实现 自定义UI控

iOS开发项目篇—20存储账号信息

iOS开发项目篇—20存储账号信息 一.简单说明 1.不论请求是否成功,都在发送Post请求后,隐藏遮罩. 2.在授权成功后,切换根控制器. (1)说明 切换到控制器有几种情况,要么是切换到新特性,要么是切换到“首页”. 没有必要每次进入程序都需要登录,且每次返回的数据都是一样的,所以只需要把拿到的信息保存到沙盒里就可以了. 判断上次有没有登录成功(把拿到的access_token保存到沙盒中,如果沙盒中有access_token,说明上次登录成功),如果上次登陆成功,那么就判断是否要进入新特性

iOS开发项目篇—36封装微博业务

iOS开发项目篇—36封装微博业务 一.简单说明 1.请求参数面向模型 2.请求结果面向模型 3.对控制器来说应该屏蔽业务细节.不让控制器关心(知道)业务细节,它只需要知道自己在做某个业务 @通过一个专门的业务处理类:处理微博业务细节 说明: 业务:加载新的微博首页数据 实现:给新浪服务器发送一个GET请求 业务:加载更多的首页微博数据 实现1:给新浪服务器发送一个GET请求 实现2:去沙盒中加载以前离线缓存的微博数据  二.实现 1.新建一个微博业务处理类,继承自NSObject 微博业务处理

iOS开发项目篇—34获取用户信息

iOS开发项目篇—34获取用户信息 一.简单说明 需求:获取当前用户的昵称 ,需要获取当前登录用户的个人信息. 查看接口 要求传递的参数 这里要获取的时用户的昵称(所以使用用户id作为参数传入) 二.实现代码 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 5 //设置导航栏内容 6 [self setupNavBar]; 7 8 //集成刷新控件 9 [self setupRefresh]; 10 11 //设置用户的昵称为标题 12 [s

iOS开发项目篇—29自定义工具条

iOS开发项目篇—29自定义工具条 一.简单说明 1.实现效果: 2.实现思路: (1)尝试: 1 //添加子控件 2 -(void)setupTextView 3 { 4 //1.创建输入控件 5 YYTextView *textView=[[YYTextView alloc]init]; 6 //设置frame 7 textView.frame=self.view.bounds; 8 [self.view addSubview:textView]; 9 self.textView=textV