关于iOS开发中键盘的退出,其实方法有很多中,而且我也学会了不少,包括各种非纯代码界面的退出。
其实这里纯代码界面推出如果用到Xib何Storyboard上面去还是一样的思路操作,只不过笔者在开发的时候是在纯代码界面遇到的问题,所以久以此命名。
下面大家介绍怎么在纯代码的情况下,退出(隐藏)键盘,Xib和StoryBoard情况下这里就不解释了(照此思路)。
一:UITextField
关于UITextFiel个人感觉又很多中方法,但是最近开发中我用的最多的也就是这两种,根据和已经在公司上班的同行的聊天中,现在开发中用的最多的也就是这两种,当然如果你还想去学习其他的方法或者更牛逼的方法,亦或者你想在一般的程序员面前装一下逼那也是可以的。
1)点击Return
关于点击Return是要实现一个代理方法那就是
1 -(BOOL)textFieldShouldReturn:(UITextField *)textField 2 { 3 4 5 [textField resignFirstResponder]; 6 return YES; 7 }
但是在这之前你需要让你想要退出键盘所在类中实现一个代理那就是UITextFieldDelegate:
@interface iCocosFBViewController ()
实现了这个代理之后还没有完,还要定义一个属性:
@property (nonatomic, weak) UITextField *text;
最后在相应的启动方法中遵守这个代理:
_text.delegate = self;
那么到这一切就OK了,在任意非方法行的实现文件中输入上面的代理方法就可以实现点击Return退出键盘了。
2)触摸屏幕
这个触摸屏幕就简单了,说先你需要定义一个属性text(同上)。你想如果你要退出键盘,可定是当你摸一下屏幕键盘就立刻退出,你不可能海让他等个一辆秒把,什么你会?那你就一直等下去把。
既然要立刻就退出,那么在屏幕触摸的代理方法中我们知道有一个方法撒撒Began方法:
对了就是他-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event我们只需要在这里实现退出键盘的代码就可以,这里退出键盘的代码貌似也有两种,,但是你想你既然想退出键盘肯定是介绍编辑,除非你还有其他 的地方要输入,那就不叫退出键盘了,所以我们使用最多的就是直接End,在这个方法中使得文本直接End编辑,End。。End。。。还没听懂,算了直接 给你看代码,在看不懂还是回家种田把!
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.text endEditing:YES]; }
二:TextView
关于TextView方法基本上和上面的一样知识代理和代理方法不一样,但是思路完全是一模一样的,所以我就不做太多介绍。
1)Return
实现一个代理方法那就是
1 -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 2 { 3 if ([text isEqualToString:@"\n"]) { 4 [textView resignFirstResponder]; 5 return NO; 6 } 7 return YES; 8 }
但是在这之前你需要让你想要退出键盘所在类中实现一个代理那就是UITextViewDelegate:
@interface iCocosFBViewController ()
实现了这个代理之后还没有完,还要定义一个属性:
@property (nonatomic, weak) UITextView *text;
最后在相应的启动方法中遵守这个代理:
_text.delegate = self;
。。。。。
。。
。
2)触摸屏幕
。。。。
。。。
。。
。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.text endEditing:YES]; }
最后总大家总结一点,那就是UITextField和UITextView退出键盘的相同点与不同点:
其实这两个控制退出键盘的方法80%都是一样的,比如如果你是要触摸屏幕退出那么都是实现这个方法
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.text endEditing:YES]; }
然后,然后就没有然后了。。。。。。
关于实现代理方法不同的地方就是代理名,属性名,还有就是代理方法名不同,只是UITextView这个代理方法中用到了一个匹配字符串,\n,不要问这是撒,我也不知道。。。。左看右看还是没看懂,\->n我猜可能是叫你去睡觉的意思!。
如果能够匹配就刚好是TextField的方法,,,
。。。
。
。
。
当然还有一些触摸背景退出的,这里给个思路,直接在上面放一个UIButton设置成界面大小,并设置为透明,最后设置他的UserEnale或者userInteractionEnabled为NO,再实现点击事件久可以。
这里最后,介绍一下关于Swift推出键盘的方法(只是简单的介绍):
// 第一种是遵循代理,是在代理方法中实现键盘的隐藏
-
1 override func didReceiveMemoryWarning() { 2 super.didReceiveMemoryWarning() 3 // Dispose of any resources that can be recreated. 4 } 5 // 第一种方法。用代理实现键盘的隐藏 6 func textFieldShouldReturn(textField: UITextField) -> Bool { 7 if (textField == self.text) { 8 9 textField.resignFirstResponder() 10 // self.view.becomeFirstResponder() 11 } 12 return true; 13 } 14
// 第二种方法实现键盘的隐藏
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { self.text.resignFirstResponder() self.pwdtext.resignFirstResponder() }
或许你还见过下面的方法:
//第1种收起键盘的方法
1 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 2 { 3 [[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil]; 4 }
//第2种收起键盘的方法
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [[[UIApplication sharedApplication] keyWindow] endEditing:YES]; }