一,textfield的return键改变
方案1.改变键盘右下角的换行(enter)键为完成键,后实现代理方法键盘自动回弹
UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(100, 300, 200, 40)]; [self.view addSubview:textField]; textField.delegate = self; textField.returnKeyType = UIReturnKeyDone;//改变为完成键,如果在项目中导入了YYText框架那么原生的就被替换掉了,变为returnKeyType = UIKeyboardTypeTwitter; //实现UITextField代理方法 - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder];//取消第一响应者 return YES; } /*textField.returnKeyType可以改变为很多样式 typedef NS_ENUM(NSInteger, UIReturnKeyType) { UIReturnKeyDefault, UIReturnKeyGo, UIReturnKeyGoogle, UIReturnKeyJoin, UIReturnKeyNext, UIReturnKeyRoute, UIReturnKeySearch, UIReturnKeySend, UIReturnKeyYahoo, UIReturnKeyDone, UIReturnKeyEmergencyCall, UIReturnKeyContinue NS_ENUM_AVAILABLE_IOS(9_0), }; */
当然搜狗输入法是自带隐藏键盘的功能的,但是你不能保证每个用户都装有搜狗输入法,这种方案也会改变搜狗键盘的右下角按钮为完成键
方案2.点击textField以外区域键盘回弹
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; }
如果textField在tableView上还可以实现下面的tableView的代理方法
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [self.view endEditing:YES]; }
问题二:键盘键盘遮挡输入框的的问题
解决方案
#pragma mark - textFieldDelegate(别忘了遵守协议设置代理) - (void)textFieldDidBeginEditing:(UITextField *)textField { self.view.y = self.view.y - 216; //216是输入框在最底部时view移动的距离,具体移动多少距离,需要根据实际情况而定 } - (void)textFieldDidEndEditing:(UITextField *)textField { self.view.y = self.view.y + 216; }
其实这里也可以自己写个动画!只要实现这两个方法就可以了,一般的话,会在键盘弹出的时候,监听事件,然后进行操作的!
同样textview也可以实现点击return键让键盘隐藏的操作,代码如下:
UITextFieldDelegate代理里面响应return键的回调:textFieldShouldReturn:。 但是 UITextView的代理UITextViewDelegate 里面并没有这样的回调。 但是有别的方法可以实现: UITextViewDelegate里面有这样一个代理函数: - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 这个函数的最后一个参数text代表你每次输入的的那个字,所以: - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ if ([text isEqualToString:@" "]){ //判断输入的字是否是回车,即按下return //在这里做你响应return键的代码
[self.textView resignFirstResponder]; return NO; //这里返回NO,就代表return键值失效,即页面上按下return,不会出现换行,如果为yes,则输入页面会换行 } return YES; }