自定义键盘输入框的实现

一、键盘自定义输入框的滑动

现在在很多输入界面中,会在键盘上方弄一个view,比如左边是输入框,右边会有一个按钮叫发送之类的,并且初始的时候,键盘是不显示的,这个view在最下面,当点击输入框的时候,view会随着键盘上滑,最后会固定在键盘的上方,当键盘消失时,输入框又随着键盘跑到底部,效果图就是类似微信的输入框那样,如下图所示:


这种效果要怎么处理呢?请看下面

为了让工具条上下移动,我们就要求出键盘上下移动的高度值,从而知道工具条该上下移动的高度值,想获取键盘的移动值,就要对键盘的显示和隐藏进行监听,我们这里可以使用通知,是不是觉得思路很清晰了,那么开始吧。

1. 初始化的时候把输入view放在viewcontroller的底部,我是用xib画的,并建立输入view到viewcontroller底部的距离约束,初始化为0,对应到代码的属性为

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *viewToBottomDistance;
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 键盘通知
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

    _questionTextField.backgroundColor = WhiteColor;
    _questionTextField.placeholder = @"吃点啥?";
}

2. 在键盘通知中处理

- (void)keyboardWillChangeFrame:(NSNotification *)notification
{
    // 键盘显示\隐藏完毕的frame
    CGRect frame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    // 修改底部约束
    self.viewToBottomDistance.constant = ScreenHeight - frame.origin.y;
    // 动画时间
    CGFloat duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    // 动画
    [UIView animateWithDuration:duration animations:^{
        [self.view layoutIfNeeded];
    }];
}

二、多个textfield有不同的输入框

有时候在同一个界面里面,可能有多个TextField输入框,而点击不同额输入框,我们可能希望弹出的键盘拥有不同的工具条,这时候我们怎么办呢?

1.思路

首先我们要有那么几种工具条,可以使用xib方式(简单,不讲解了了,不知道可以发邮件给我),然后设置不同输入框的配件视图(textField.inputAccessoryView = xxxTool),设置输入框成为第一响应者,这样弹出的时候就能有不同的toolBar了。

2.代码实现

UIView *tool1 = [[[NSBundle mainBundle] loadNibNamed:@"ToolBar1" owner:nil options:nil] lastObject];
UIView *tool2 = [[[NSBundle mainBundle] loadNibNamed:@"ToolBar2" owner:nil options:nil] lastObject];
self.textField1.inputAccessoryView = tool1;
self.textField2.inputAccessoryView = tool2;
3.常用知识

- (BOOL)becomeFirstResponder;
取消第一响应者
- (BOOL)resignFirstResponder;
全部取消第一响应者
- (BOOL)endEditing:(BOOL)force;    //使用这个使得view或者其所有的子视图都取消第一响应者 (optionally force)

参考:http://www.tuicool.com/articles/ZfIje2y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值