在 iOS 程序中当想要在文本框(textField)中输入数据,轻触文本框会打开键盘。 iPhone 程序中的键盘没有专用退出键盘的按钮,不过我们可以采取一些方法关闭它。例如,我们可以实现按下 Rerun (有时也是 Done、Research 等)键关闭键盘,或者,更人性化的,轻触背景关闭键盘。
对一些方法先简单分类1、非协议实现 2、协议方法实现
废话不多说,直接上一种非协议方法且是最人性化的轻触背景退出键盘
首先申明 @property (strong, nonatomic) UITextField *textfield;
方法1:利用UIView的触摸事件,为什么能用?因为UITextField继承自UIView,所以能在控制器直接重写
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 实现触摸背景退出键盘
上完整代码
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if(![self.textfield isExclusiveTouch]) //在文本框外部区域触摸屏幕
{
[self.textfield resignFirstResponder];
}
}
方法2:利用协议方法,实现return键退出键盘
@interface ViewController () <UITextFieldDelegate> //实现UITextField代理
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder]; //textField代表当前为第一响应者的textField控件
return YES;
}
一般,前两种方法就能够实现一些简单的功能,但这儿提供的第三种方法有更好的灵活性
方法3:给UITextField控件绑定一个 UIControlEventEditingDidEndOnExit事件,实现return键退出键盘
[self.textfield addTarget:self action:@selector(textFieldEndEditingAndReturn:) forControlEvents:UIControlEventEditingDidEndOnExit];
- (void)textFieldEndEditingAndReturn:(id)sender
{
[sender resignFirstResponder];
}
当然,在代码的世界没有最好,只有更好,在此,谨以此抛砖引玉。如有疑问,或完整程序,敬请留言。
贴出viewDidLoad()的全部代码,希望能略尽绵薄之力
- (void)viewDidLoad
{
[super viewDidLoad];
self.textfield = [[UITextField alloc] initWithFrame:CGRectMake(120, 200, 100, 30)];
self.textfield.borderStyle = UITextBorderStyleRoundedRect; //边框样式
self.textfield.clearButtonMode = UITextFieldViewModeAlways; //一键清楚
self.textfield.placeholder = @"textfield"; //水印效果
self.textfield.delegate = self; //设置代理
[self.textfield addTarget:self action:@selector(textFieldEndEditingAndReturn:) forControlEvents:UIControlEventEditingDidEndOnExit];
[self.view addSubview:self.textfield];
}