IOS编程101:关闭输入键盘

使用UITextField、UITextView和UISearchBar完成输入时,按Return / Done 键隐藏键盘是很好的做法。另外,用户触摸键盘外空白区域隐藏键盘也是用户期望的行为。

Return键隐藏键盘

通过实现 UITextFieldDelegate 协议的可选方法textFieldShouldReturn: 来实现 Return 隐藏键盘。 因此,在头文件中添加协议的声明:

#import <UIKit/UIKit.h>
@interface jaceViewController : UIViewController <UITextFieldDelegate>

使用storyboard将jaceViewController设为textfield(nickname)的代理:

Snip20140527_3

在实现文件(jaceViewController.h)中实现方法:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
 [textField resignFirstResponder];
 return YES;
}

Done 键隐藏键盘

我们将住址的Return key 设为「Done」,并将address的didEndOnExit事件与onDidEndOnExit连接:

Snip20140527_8

- (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发送此方法,也可实现点击键盘外空白区域隐藏键盘的特性。

Snip20140527_9

下载此项目

参考资料:

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

3.textField のキーボード非表示に関するメモ

4.关闭ios虚拟键盘的几种方法

发表评论