UITextField中键盘的弹出与隐藏状态通过系统的通知名称UIKeyboardWillShowNotification、UIKeyboardWillHideNotification来获取
UITextField中键盘的退出方法常用的有两种:1.点击空白处回撤键盘,2.点击Return建回撤键盘。
下面附上键盘的监听方法和键盘退出方法。
1.首先设置宏定义取屏幕宽高
#define WIDTH [[UIScreen mainScreen] bounds].size.width
#define HEIGHT [[UIScreen mainScreen] bounds].size.height
2.让控制器遵循协议
@interfaceViewController ()<UITextFieldDelegate>
3.设置属性值
@property (nonatomic,strong)UITextField * textField;
//记录下textField的原始中心点
@property (nonatomic)CGPoint center;
4.附上UITextField的创建与监听键盘的方法
//创建对象
self.textField = [[UITextField alloc]initWithFrame:CGRectMake(50,HEIGHT - 100,WIDTH -100 ,50)];
//设置代理
self.textField.delegate =self;
//占位提醒字符
self.textField.placeholder =@"请输入内容";
//边缘风格
self.textField.borderStyle = UITextBorderStyleRoundedRect;
//键盘类型
self.textField.keyboardType = UIKeyboardTypeDefault;
//设置字体
self.textField.font = [UIFont systemFontOfSize:25];
//获取键盘中心点
self.center =self.textField.center;
[self.view addSubview:self.textField];
//创建观察者,监听键盘的弹出
[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardHandle:)name: UIKeyboardWillShowNotification object:nil];
//创建观察者,监听键盘的隐藏 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardHandle:)name:UIKeyboardWillHideNotification object:nil];
5.keyboardHandle:的方法
- (void)keyboardHandle:(NSNotification *)notify{
//获取文本输入框中心点坐标
CGPoint center =self.textField.center;
//取出键盘的尺寸值
NSValue *rectValue = notify.userInfo[UIKeyboardFrameBeginUserInfoKey];
//官方提供了直接从NSValue转化为CGRect的函数
CGRect rect = rectValue.CGRectValue;
//获取键盘的高度
CGFloat height = rect.size.height;
//获取通知的名字
NSString *nameStr = notify.name;
//判断是哪个通知,做出相应的处理
//键盘弹出
if ([nameStr isEqualToString:UIKeyboardWillShowNotification]) {
center.y =self.center.y - height;
}else{//键盘退出
center = self.center;
}
self.textField.center = center;
}
6.键盘退出的方法
//F1:点击屏幕空白处键盘退出
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self.textField resignFirstResponder];
}
#pragma mark - UITextFieldDelegate
//F2:点击Return键键盘退出
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
returnYES;
}