iOS-自定义键盘顶部Toolbar

效果图:
iOS-自定义键盘顶部Toolbar_第1张图片

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

1.xib新建ToolBar视图
iOS-自定义键盘顶部Toolbar_第2张图片

iOS-自定义键盘顶部Toolbar_第3张图片

最终样式:

重要一步:
在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(@"确定");
    }
}

你可能感兴趣的:(tag,toolbar,UITextField)