一、键盘自定义输入框的滑动
现在在很多输入界面中,会在键盘上方弄一个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 = @"吃点啥?"; }
- (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