參考: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:@"\n"]){ //判斷輸入的字是否是回車,即按下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