使用UITextField、UITextView和UISearchBar完成输入时,按Return / Done 键隐藏键盘是很好的做法。另外,用户触摸键盘外空白区域隐藏键盘也是用户期望的行为。
Return键隐藏键盘
通过实现 UITextFieldDelegate 协议的可选方法textFieldShouldReturn: 来实现 Return 隐藏键盘。 因此,在头文件中添加协议的声明:
#import <UIKit/UIKit.h> @interface jaceViewController : UIViewController <UITextFieldDelegate>
使用storyboard将jaceViewController设为textfield(nickname)的代理:
在实现文件(jaceViewController.h)中实现方法:
- (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; }
Done 键隐藏键盘
我们将住址的Return key 设为「Done」,并将address的didEndOnExit事件与onDidEndOnExit连接:
- (IBAction)onDidEndOnExit:(id)sender { [sender resignFirstResponder]; }
触摸键盘外空白区域隐藏键盘
需要监听屏幕上的touch事件,覆盖UIResponder的这个方法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self.view endEditing:YES]; [super touchesBegan:touches withEvent:event]; }
通用方法
利用responder chain原理。
- (IBAction)dismissKeyboard:(id)sender{ [[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil]; }
你可以与任何视图的相应事件连接,实现隐藏键盘,比如最底层添加一个与屏幕等大的button,Touch Up Inside时向button发送此方法,也可实现点击键盘外空白区域隐藏键盘的特性。
下载此项目
参考资料:
1.iOS tutorial: hide keyboard after return / done key press in UITextField
2.UIKit: Hide the keyboard without a reference to the currently focused text field