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=textView;
10     
11     //2.设置占位文字提醒
12     textView.placehoder=@"分享新鲜事···";
13     //3.设置字体(说明:该控件继承自UITextfeild,font是其父类继承下来的属性)
14     textView.font=[UIFont systemFontOfSize:15];
15     //设置占位文字的颜色为棕色
16     textView.placehoderColor=[UIColor lightGrayColor];
17     
18     //4.设置键盘顶部的工具条
19     textView.inputAccessoryView=[UIButton buttonWithType:UIButtonTypeContactAdd];
20 }

(2)实现方案

自定义一个继承自UIView的类,实现工具条。在View的内部添加五个按钮。

导入图片素材

二、实现

1.搭建toolbar

YYComposeToolBar.m文件

 1 //
 2 //  YYComposeToolBar.m
 3 //
 4 
 5 #import "YYComposeToolBar.h"
 6 
 7 @implementation YYComposeToolBar
 8 
 9 - (id)initWithFrame:(CGRect)frame
10 {
11     self = [super initWithFrame:frame];
12     if (self) {
13         //设置工具条的背景图片
14         self.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageWithName:@"compose_toolbar_background"]];
15         
16         //添加所有的子控件
17         [self addButtonWithIcon:@"compose_trendbutton_background" highIcon:@"compose_trendbutton_background_highlighted" tag:YYComposeToolbarButtonTypeTrend];
18         [self addButtonWithIcon:@"compose_camerabutton_background" highIcon:@"compose_camerabutton_background_highlighted"tag: YYComposeToolbarButtonTypeCamera];
19         [self addButtonWithIcon:@"compose_toolbar_picture" highIcon:@"compose_toolbar_picture_highlighted" tag:YYComposeToolbarButtonTypePicture];
20         [self addButtonWithIcon:@"compose_emoticonbutton_background" highIcon:@"compose_emoticonbutton_background_highlighted"tag: YYComposeToolbarButtonTypeEmotion];
21         [self addButtonWithIcon:@"compose_mentionbutton_background" highIcon:@"compose_mentionbutton_background_highlighted" tag:YYComposeToolbarButtonTypeMention];
22     }
23     return self;
24 }
25 
26 /**
27  *  添加一个按钮
28  *
29  *  @param icon     默认图标
30  *  @param highIcon 高亮图标
31  */
32 - (void)addButtonWithIcon:(NSString *)icon highIcon:(NSString *)highIcon tag:(HMComposeToolbarButtonType)tag
33 {
34     UIButton *button=[[UIButton alloc]init];
35     [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
36     [button setImage:[UIImage imageWithName:icon] forState:UIControlStateNormal];
37     [button setImage:[UIImage imageWithName:highIcon] forState:UIControlStateHighlighted];
38     [self addSubview:button];
39 }
40 -(void)buttonClick:(UIButton *)button
41 {
42     YYLog(@"%@--",button);
43 }
44 
45 -(void)layoutSubviews
46 {
47     [super layoutSubviews];
48     int count=self.subviews.count;
49     
50     CGFloat buttonW=self.width/count;
51     CGFloat buttonH=self.height;
52     for (int i=0; i<count; i++) {
53         UIButton *button=self.subviews[i];
54         button.y=0;
55         button.width=buttonW;
56         button.height=buttonH;
57         button.x=i*buttonW;
58     }
59     
60 }
61 
62 @end

YYComposeToolBar.h文件

 1 //
 2 //  YYComposeToolBar.h
 3 //  22-微博自定义工具条
 4 //
 5 
 6 #import <UIKit/UIKit.h>
 7 
 8 @interface YYComposeToolBar : UIView
 9 
10 //使用枚举
11 typedef enum {
12     YYComposeToolbarButtonTypeCamera, // 照相机
13     YYComposeToolbarButtonTypePicture, // 相册
14     YYComposeToolbarButtonTypeMention, // 提到@
15     YYComposeToolbarButtonTypeTrend, // 话题
16     YYComposeToolbarButtonTypeEmotion // 表情
17 } YYComposeToolbarButtonType;
18 
19 @end

YYComposeViewController.m文件

 1 //
 2 //  YYComposeViewController.m
 3 //
 4 
 5 #import "YYComposeViewController.h"
 6 #import "YYTextView.h"
 7 #import "YYComposeToolBar.h"
 8 
 9 @interface YYComposeViewController ()
10 @property(nonatomic,weak)YYTextView *textView;
11 @end
12 
13 @implementation YYComposeViewController
14 
15 
16 - (void)viewDidLoad
17 {
18     [super viewDidLoad];
19   
20     //设置导航栏
21     [self setupNavBar];
22     
23     //添加子控件
24     [self setupTextView];
25     
26     //添加工具条
27     [self setupToolbar];
28     
29 }
30 
31 -(void)setupToolbar
32 {
33     //1.创建
34     YYComposeToolBar *toolBar=[[YYComposeToolBar alloc]init];
35     toolBar.width=self.view.width;
36     toolBar.height=44;
37     
38     //2.显示
39     self.textView.inputAccessoryView=toolBar;
40 }
41 //添加子控件
42 -(void)setupTextView
43 {
44     //1.创建输入控件
45     YYTextView *textView=[[YYTextView alloc]init];
46     //设置frame
47     textView.frame=self.view.bounds;
48     [self.view addSubview:textView];
49     self.textView=textView;
50     
51     //2.设置占位文字提醒
52     textView.placehoder=@"分享新鲜事···";
53     //3.设置字体(说明:该控件继承自UITextfeild,font是其父类继承下来的属性)
54     textView.font=[UIFont systemFontOfSize:15];
55     //设置占位文字的颜色为棕色
56     textView.placehoderColor=[UIColor lightGrayColor];
57     
58 }
59 
60 //设置导航栏
61 -(void)setupNavBar
62 {
63     self.title=@"发消息";
64     self.view.backgroundColor=[UIColor whiteColor];
65     self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"取消" style:UIBarButtonItemStyleBordered target:self action:@selector(cancel)];
66     self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"发送" style:UIBarButtonItemStyleBordered target:self action:@selector(send)];
67     self.navigationItem.rightBarButtonItem.enabled=NO;
68 }
69 
70 -(void)send
71 {
72     YYLog(@"发送----");
73 }
74 
75 -(void)cancel
76 {
77 //    [self dismissViewControllerAnimated:YES completion:nil];
78     self.textView.text=@"测试";
79 }
80 @end

实现效果:

打印查看:

2.设置代理,监听按钮的点击事件

获取按钮的几种方式:

此处通过给button设置tag,而tag定义为枚举。

优点:不论添加按钮的顺序如何改变,程序都不会出错,而且可读性好。

1 //使用枚举
2 typedef enum {
3     YYComposeToolbarButtonTypeCamera, // 照相机
4     YYComposeToolbarButtonTypePicture, // 相册
5     YYComposeToolbarButtonTypeMention, // 提到@
6     YYComposeToolbarButtonTypeTrend, // 话题
7     YYComposeToolbarButtonTypeEmotion // 表情
8 } YYComposeToolbarButtonType;

实现代码如下:

YYComposeToolBar.h文件

 1 //
 2 //  YYComposeToolBar.h
 3 //  22-微博自定义工具条
 4 //
 5 
 6 #import <UIKit/UIKit.h>
 7 
 8 //使用枚举
 9 typedef enum {
10     YYComposeToolbarButtonTypeCamera, // 照相机
11     YYComposeToolbarButtonTypePicture, // 相册
12     YYComposeToolbarButtonTypeMention, // 提到@
13     YYComposeToolbarButtonTypeTrend, // 话题
14     YYComposeToolbarButtonTypeEmotion // 表情
15 } YYComposeToolbarButtonType;
16 
17 @class YYComposeToolBar;
18 @protocol YYComposeToolBarDelegate <NSObject>
19 
20 -(void)composeTool:(YYComposeToolBar *)toolbar didClickedButton:(YYComposeToolbarButtonType)buttonType;
21 
22 @end
23 @interface YYComposeToolBar : UIView
24 @property(nonatomic,weak)id<YYComposeToolBarDelegate> delegate;
25 @end

YYComposeToolBar.m文件

 1 //
 2 //  YYComposeToolBar.m
 3 //  22-微博自定义工具条
 4 //
 5 
 6 #import "YYComposeToolBar.h"
 7 
 8 @implementation YYComposeToolBar
 9 
10 - (id)initWithFrame:(CGRect)frame
11 {
12     self = [super initWithFrame:frame];
13     if (self) {
14         //设置工具条的背景图片
15         self.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageWithName:@"compose_toolbar_background"]];
16         
17         //添加所有的子控件
18         [self addButtonWithIcon:@"compose_trendbutton_background" highIcon:@"compose_trendbutton_background_highlighted" tag:YYComposeToolbarButtonTypeTrend];
19         [self addButtonWithIcon:@"compose_camerabutton_background" highIcon:@"compose_camerabutton_background_highlighted"tag: YYComposeToolbarButtonTypeCamera];
20         [self addButtonWithIcon:@"compose_toolbar_picture" highIcon:@"compose_toolbar_picture_highlighted" tag:YYComposeToolbarButtonTypePicture];
21         [self addButtonWithIcon:@"compose_emoticonbutton_background" highIcon:@"compose_emoticonbutton_background_highlighted"tag: YYComposeToolbarButtonTypeEmotion];
22         [self addButtonWithIcon:@"compose_mentionbutton_background" highIcon:@"compose_mentionbutton_background_highlighted" tag:YYComposeToolbarButtonTypeMention];
23     }
24     return self;
25 }
26 
27 /**
28  *  添加一个按钮
29  *
30  *  @param icon     默认图标
31  *  @param highIcon 高亮图标
32  */
33 - (void)addButtonWithIcon:(NSString *)icon highIcon:(NSString *)highIcon tag:(YYComposeToolbarButtonType)tag
34 {
35     UIButton *button=[[UIButton alloc]init];
36     button.tag=tag;
37     [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
38     [button setImage:[UIImage imageWithName:icon] forState:UIControlStateNormal];
39     [button setImage:[UIImage imageWithName:highIcon] forState:UIControlStateHighlighted];
40     [self addSubview:button];
41 }
42 -(void)buttonClick:(UIButton *)button
43 {
44 //    YYLog(@"%@--",button);
45     if ([self.delegate respondsToSelector:@selector(composeTool:didClickedButton:)]) {
46         [self.delegate composeTool:self didClickedButton:button.tag];
47     }
48 }
49 
50 -(void)layoutSubviews
51 {
52     [super layoutSubviews];
53     int count=self.subviews.count;
54     
55     CGFloat buttonW=self.width/count;
56     CGFloat buttonH=self.height;
57     for (int i=0; i<count; i++) {
58         UIButton *button=self.subviews[i];
59         button.y=0;
60         button.width=buttonW;
61         button.height=buttonH;
62         button.x=i*buttonW;
63     }
64     
65 }
66 
67 @end

YYComposeViewController.m文件

  1 //
  2 //  YYComposeViewController.m
  3 //
  4 
  5 #import "YYComposeViewController.h"
  6 #import "YYTextView.h"
  7 #import "YYComposeToolBar.h"
  8 
  9 @interface YYComposeViewController ()<YYComposeToolBarDelegate,UITextViewDelegate>
 10 @property(nonatomic,weak)YYTextView *textView;
 11 @end
 12 
 13 @implementation YYComposeViewController
 14 
 15 
 16 - (void)viewDidLoad
 17 {
 18     [super viewDidLoad];
 19   
 20     //设置导航栏
 21     [self setupNavBar];
 22     
 23     //添加子控件
 24     [self setupTextView];
 25     
 26     //添加工具条
 27     [self setupToolbar];
 28     
 29 }
 30 
 31 -(void)setupToolbar
 32 {
 33     //1.创建
 34     YYComposeToolBar *toolBar=[[YYComposeToolBar alloc]init];
 35     toolBar.width=self.view.width;
 36     toolBar.height=44;
 37     //设置代理
 38     toolBar.delegate=self;
 39     
 40     //2.显示
 41     self.textView.inputAccessoryView=toolBar;
 42 }
 43 
 44 #pragma mark-YYComposeToolBarDelegate
 45 -(void)composeTool:(YYComposeToolBar *)toolbar didClickedButton:(YYComposeToolbarButtonType)buttonType
 46 {
 47     switch (buttonType) {
 48         case YYComposeToolbarButtonTypeCamera://照相机
 49             YYLog(@"打开照相机");
 50             break;
 51         case YYComposeToolbarButtonTypePicture://相册
 52             YYLog(@"打开相册");
 53             break;
 54         case YYComposeToolbarButtonTypeMention://提到
 55             YYLog(@"提到");
 56             break;
 57         case YYComposeToolbarButtonTypeEmotion://表情
 58             YYLog(@"打开表情");
 59             break;
 60         case YYComposeToolbarButtonTypeTrend://话题
 61             YYLog(@"打开话题");
 62             break;
 63             
 64         default:
 65             break;
 66     }
 67 }
 68 
 69 /**
 70  *  view显示完毕的时候再弹出键盘,避免显示控制器view的时候会卡住
 71  */
 72 - (void)viewDidAppear:(BOOL)animated
 73 {
 74     [super viewDidAppear:animated];
 75     
 76     // 成为第一响应者(叫出键盘)
 77     [self.textView becomeFirstResponder];
 78 }
 79 
 80 #pragma mark-UITextViewDelegate
 81 /**
 82  *  当用户开始拖拽scrollView时调用
 83  */
 84 -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
 85 {
 86     [self.view endEditing:YES];
 87 }
 88 //添加子控件
 89 -(void)setupTextView
 90 {
 91     //1.创建输入控件
 92     YYTextView *textView=[[YYTextView alloc]init];
 93     //设置垂直方向上拥有弹簧效果
 94     textView.alwaysBounceVertical=YES;
 95     textView.delegate=self;
 96     //设置frame
 97     textView.frame=self.view.bounds;
 98     [self.view addSubview:textView];
 99     self.textView=textView;
100     
101     //2.设置占位文字提醒
102     textView.placehoder=@"分享新鲜事···";
103     //3.设置字体(说明:该控件继承自UITextfeild,font是其父类继承下来的属性)
104     textView.font=[UIFont systemFontOfSize:15];
105     //设置占位文字的颜色为棕色
106     textView.placehoderColor=[UIColor lightGrayColor];
107     
108 }
109 
110 //设置导航栏
111 -(void)setupNavBar
112 {
113     self.title=@"发消息";
114     self.view.backgroundColor=[UIColor whiteColor];
115     self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"取消" style:UIBarButtonItemStyleBordered target:self action:@selector(cancel)];
116     self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"发送" style:UIBarButtonItemStyleBordered target:self action:@selector(send)];
117     self.navigationItem.rightBarButtonItem.enabled=NO;
118 }
119 
120 -(void)send
121 {
122     YYLog(@"发送----");
123 }
124 
125 -(void)cancel
126 {
127     [self dismissViewControllerAnimated:YES completion:nil];
128 //    self.textView.text=@"测试";
129 }
130 @end

注意点

设置垂直方向上的弹簧效果

退出键盘

效果:拖动的时候键盘消失

iOS开发项目篇—29自定义工具条,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。