参考:https://www.jianshu.com/p/f310fa9459ed iOS 键盘回车键(换行、回车符)修改
https://www.jianshu.com/p/532d12375e9a iOS中收起键盘的几种方式
大体来说,收起键盘的方法有:
- 让textFiled放弃成为第一响应者(
resignFirstResponder
) - 让view或者子view强制结束编辑状态(
endEditing
)
1.输入完以后用户点击return
后收起键盘。
可以点击
return
收起键盘并不意味着弹出来的键盘一定都有return
这个按键,比如数字键盘类型就没有,UIKeyboardTypeWebSearch
类型的键盘return
键就变成了Go
键,需要注意的是这时候的Go
键相当于return
键。
要想实现点击return
让键盘收起,首先需要设置textField代理,当然还有遵循UITextFieldDelegate
协议:
_textField.delegate = self;
然后实现协议方法- (BOOL)textFieldShouldReturn:(UITextField *)textField;
,当然你也可以在这个方法里 main实现一些需求逻辑,比如判断输入的内容符不符合要求等。
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
return [textField resignFirstResponder];
}
2.点击背景后收起键盘
点击背景收起键盘可以实现view的
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
方法,然后执行view的- (BOOL)endEditing:(BOOL)force;
方法。
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self.view endEditing:YES]; //实现该方法是需要注意view需要是继承UIControl而来的
}
还有一些比较笨的方法也可以实现达到点击背景后收起键盘的效果,比如:在背景view上面加手势,添加UIButton或者view,然后在对应的点击事件的监听方法中实现resignFirstResponder
或者endEditing
。
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(keyboardHide:)];
//设置成NO表示当前控件响应后会传播到其他控件上,默认为YES。
tapGestureRecognizer.cancelsTouchesInView = NO;
//将触摸事件添加到view上
[self.view addGestureRecognizer:tapGestureRecognizer];
-(void)keyboardHide:(UITapGestureRecognizer*)tap{
[textFiled resignFirstResponder];
}
3.不用view实现endEditing
的方法
如果说在比较难获取viewController的view时,可以使用下面的方法:
[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
或者
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
UITextField 和 UITextView
如图修改键盘
UIReturnKeyDefault
UIReturnKeyGo
UIReturnKeyGoogle
UIReturnKeyJoin
UIReturnKeyNext
UIReturnKeyRoute
UIReturnKeySearch
UIReturnKeySend
UIReturnKeyYahoo
UIReturnKeyDone
UIReturnKeyEmergencyCall
UIReturnKeyContinue
UITextView *textView = [[UITextView alloc] init];
textView.returnKeyType = UIReturnKeyDone;
UITextField *textField= [[UITextField alloc] init];
textView.returnKeyType = UIReturnKeyDone;
对回车符事件进行监听
实现 UITextViewDelegate代理里面响
- -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
实现 UITextFieldDelegate代理里面响
- -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
这个函数的最后一个参数text代表你每次输入的的那个字,所以:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([text isEqualToString:@"
"]){ //判断输入的字是否是回车,即按下return
//[textView endEditing:YES];
//在这里做你响应return键的代码
return NO; //这里返回NO,就代表return键值失效,即页面上按下return,不会出现换行,如果为yes,则输入页面会换行
}
return YES;
}
typedef NS_ENUM(NSInteger, UIReturnKeyType) {
UIReturnKeyDefault,
UIReturnKeyGo,
UIReturnKeyGoogle,
UIReturnKeyJoin,
UIReturnKeyNext,
UIReturnKeyRoute,
UIReturnKeySearch,
UIReturnKeySend,
UIReturnKeyYahoo,
UIReturnKeyDone,
UIReturnKeyEmergencyCall,
UIReturnKeyContinue NS_ENUM_AVAILABLE_IOS(9_0),
};
// // Subtitle_I_loveVC.m // meiritupian001 // // Created by FAMAR-YF-04 on 2020/6/23. // Copyright © 2020 FAMAR-YF-04. All rights reserved. // #import "Subtitle_I_loveVC.h" #import "send_Subtitle.h" @interface Subtitle_I_loveVC ()<UITextFieldDelegate> @property (weak, nonatomic) IBOutlet UITextField *input_Sentence; @property (nonatomic, strong) send_Subtitle *send_SubtitleVC; @property (nonatomic, weak)NSString *str_input;//输入的数据 @end @implementation Subtitle_I_loveVC -(void)viewWillAppear:(BOOL)animated{ NSLog(@"视图即将加入窗口时"); [super viewDidAppear:animated]; if([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) { SEL selector = NSSelectorFromString(@"setOrientation:"); NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]]; [invocation setSelector:selector]; [invocation setTarget:[UIDevice currentDevice]]; NSInteger val = UIInterfaceOrientationPortrait;//横屏 [invocation setArgument:&val atIndex:2]; [invocation invoke]; } } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. self.input_Sentence.delegate = self; self.input_Sentence.returnKeyType = UIReturnKeyDone;//键盘类型 } - (BOOL)textFieldShouldReturn:(UITextField *)textField{ return [textField resignFirstResponder]; } // 点击空白处收起键盘 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self.view endEditing:YES]; //实现该方法是需要注意view需要是继承UIControl而来的 } - (IBAction)getinputstr:(id)sender { UITextField *_field = (UITextField *)sender; NSLog(@"fhfhff:%@",[_field text]); self.str_input = [_field text]; } - (IBAction)pushSend_Subtitle:(id)sender { _send_SubtitleVC = [[send_Subtitle alloc]init]; if(self.input_Sentence.text.length == 0){ NSLog(@"输入框输入为空"); NSLog(@"输入框输入为空:%@",self.input_Sentence.placeholder); self.send_SubtitleVC.str_subtitles = self.input_Sentence.placeholder; }else{ NSLog(@"输入框输入不为空"); NSLog(@"输入框输入不为空:%@",[self.input_Sentence text] ); self.send_SubtitleVC.str_subtitles = [self.input_Sentence text]; } [self.navigationController pushViewController:self.send_SubtitleVC animated:NO]; // [self presentViewController:self.send_SubtitleVC animated:YES completion:nil]; } @end