iOS-自定义键盘顶部Toolbar

来源:互联网 发布:吉林大学网络教育 登录 编辑:程序博客网 时间:2024/04/29 04:51

效果图:
这里写图片描述

类似这种键盘顶端可自定义barButton的Toolbar

1.xib新建ToolBar视图
这里写图片描述

这里写图片描述

最终样式:
这里写图片描述

重要一步:
在xib中->
设置”取消”barButtonItem 的tag为 100;
设置”确定”barButtonItem 的tag为 101;

2.新建继承UIToolbar 的自定义类 KeyboardToolbar
在.m方法中,将”确定”“取消”的barButtonItem 连线至

- (IBAction)barButtonItemClick:(UIBarButtonItem *)barButtonItem

注意:连线之前需要将xib和源文件对应

方法.
自定义类详情:

.h

////  KeyboardToolbar.h//  OneHelper////  Created by qiuxuewei on 16/3/9.//  Copyright © 2016年 邱学伟. All rights reserved.// 自定义键盘输入框#import <UIKit/UIKit.h>@class KeyboardToolbar;/** 输入类型 */typedef enum{    /** 确定输入 */    BTN_TYPE_DONE = 0,    /** 取消输入 */    BTN_TYPE_CANCEL,}BTN_TYPE;/** 协议 */@protocol KeyboardToolBarDelegate <NSObject>@optional//可选代理方法-(void)keyboardToolbar:(KeyboardToolbar *)toolbar btnClickType:(BTN_TYPE)btnType;@end@interface KeyboardToolbar : UIToolbar/** 工厂方法初始化Toolbar 从xib*/+(instancetype)keyboardToolbar;/** 代理方法 */@property (nonatomic, weak) id<KeyboardToolBarDelegate> keyboardDelegate;@end

.m

////  KeyboardToolbar.m//  OneHelper////  Created by qiuxuewei on 16/3/9.//  Copyright © 2016年 邱学伟. All rights reserved.//#import "KeyboardToolbar.h"@interface KeyboardToolbar ()@end@implementation KeyboardToolbar//初始化+(instancetype)keyboardToolbar{    return [[[NSBundle mainBundle] loadNibNamed:@"keyboardToolbar" owner:nil options:nil] lastObject];}- (IBAction)barButtonItemClick:(UIBarButtonItem *)barButtonItem {    BTN_TYPE btnType = BTN_TYPE_DONE; //默认确定    //如果没有实现代理    if ([self.keyboardDelegate respondsToSelector:@selector(keyboardToolbar:btnClickType:)]) {        if (barButtonItem.tag == 100) {            //如果点击的tag为100的"取消"            btnType = BTN_TYPE_CANCEL;        }        //实现代理方法        [self.keyboardDelegate keyboardToolbar:self btnClickType:btnType];    }}@end

此时,自定义Toolbar 工作完成.

真正用到的时候当然是UITextField开始输入键盘弹出的时候 ->

1.导入自定义Toolbar并且 遵守协议

#import "KeyboardToolbar.h"@interface ExchangeRateController ()<KeyboardToolBarDelegate>/** 初始化键盘上面Toolbar */@property (nonatomic, strong) KeyboardToolbar *kbToolbar;@end@implementation ExchangeRateController#pragma mark - 懒加载键盘顶部Toolbar//键盘上选择框-(KeyboardToolbar *)kbToolbar{    if (_kbToolbar == nil) {        _kbToolbar = [KeyboardToolbar keyboardToolbar];        _kbToolbar.keyboardDelegate = self;        UIBarButtonItem *item1 = (UIBarButtonItem *)_kbToolbar.items[0];        item1.title = @"取消";        UIBarButtonItem *item2 = (UIBarButtonItem *)_kbToolbar.items[2];        item2.title = @"确定";    }    return _kbToolbar;}//在初始化UITextfield的时候,//创建 UITextField 设置setInputAccessoryView 为自定义Toolbar-(void)creatTextField{    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 64, [UIScreen mainScreen].bounds.size.width - 20, 44)];    [textField setKeyboardType:UIKeyboardTypeDefault];    [textField setInputAccessoryView:self.kbToolbar];    [self.view addSubview:textField];}//实现代理方法,监听点击事件#pragma mark - keyboardDelegate-(void)keyboardToolbar:(KeyboardToolbar *)toolbar btnClickType:(BTN_TYPE)btnType{    NSLog(@"点击Toolbar");    if (btnType == BTN_TYPE_CANCEL) {        NSLog(@"取消");    }else{        NSLog(@"确定");    }}
0 0
原创粉丝点击