博客地址:張飛的個人技術(shù)博客
在使用UITextField的時候,我們會和鍵盤打交道,有時候要求彈出來的鍵盤類型是數(shù)字鍵盤,有時候要求我們彈出來的是一般的鍵盤。當(dāng)我們輸入完成的時候,就涉及到在上什么時候收回鍵盤的事情了。收回鍵盤分下面的情況來討論。
大體來說,收起鍵盤的方法有:
- 讓textFiled放棄成為第一響應(yīng)者(
resignFirstResponder) - 讓view或者子view強制結(jié)束編輯狀態(tài)(
endEditing)
1.輸入完以后用戶點擊return后收起鍵盤。
可以點擊
return收起鍵盤并不意味著彈出來的鍵盤一定都有return這個按鍵,比如數(shù)字鍵盤類型就沒有,UIKeyboardTypeWebSearch類型的鍵盤return鍵就變成了Go鍵,需要注意的是這時候的Go鍵相當(dāng)于return鍵。
要想實現(xiàn)點擊return讓鍵盤收起,首先需要設(shè)置textField代理,當(dāng)然還有遵循UITextFieldDelegate協(xié)議:
_textField.delegate = self;
然后實現(xiàn)協(xié)議方法- (BOOL)textFieldShouldReturn:(UITextField *)textField;,當(dāng)然你也可以在這個方法里 main實現(xiàn)一些需求邏輯,比如判斷輸入的內(nèi)容符不符合要求等。
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
return [textField resignFirstResponder];
}
2.點擊背景后收起鍵盤
點擊背景收起鍵盤可以實現(xiàn)view的
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event方法,然后執(zhí)行view的- (BOOL)endEditing:(BOOL)force;方法。
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self.view endEditing:YES]; //實現(xiàn)該方法是需要注意view需要是繼承UIControl而來的
}
還有一些比較笨的方法也可以實現(xiàn)達到點擊背景后收起鍵盤的效果,比如:在背景view上面加手勢,添加UIButton或者view,然后在對應(yīng)的點擊事件的監(jiān)聽方法中實現(xiàn)resignFirstResponder或者endEditing。
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(keyboardHide:)];
//設(shè)置成NO表示當(dāng)前控件響應(yīng)后會傳播到其他控件上,默認為YES。
tapGestureRecognizer.cancelsTouchesInView = NO;
//將觸摸事件添加到view上
[self.view addGestureRecognizer:tapGestureRecognizer];
-(void)keyboardHide:(UITapGestureRecognizer*)tap{
[textFiled resignFirstResponder];
}
3.不用view實現(xiàn)endEditing的方法
如果說在比較難獲取viewController的view時,可以使用下面的方法:
[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
或者
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
結(jié)尾
在項目中還得根據(jù)情況選擇使用哪一種方法,我想掌握上面的這些方法差不多就夠了,祝大家玩得愉快!如果你覺得我的文章對你有幫助,不妨任性打賞??!
