iOS—收起虚拟键盘的各种方法
2016-02-01 20:59
441 查看
本文章转自—http://justcoding.iteye.com/blog/1476171
使用虚拟键盘来输入资讯,是iOS的重要互动方式之一,虚拟键盘通常会自动出现在可以编辑的UITextField或是 UITextView 的编辑事件中,叫出键盘固然容易,但是要把它收起来,可就没有这么简单,之前在 UITextField 输入结束后的收起小键盘的方式一文中,介绍了如何在编辑完成之后收起虚拟键盘,但是如果您的元件并没有对应的事件可以让你收起虚拟键盘,那又该如何做?下列我们以类似的元件 UITextView 为例,介绍一些通用的方法。
1.点击编辑区以外的地方(UIView)
这是一种很直接的方法,当不再需要使用虚拟键盘的时候,只要点击虚拟键盘和编辑区域以外的地方,就可以将键盘收起,下面程式码是在UIView中内建的触碰事件方法函数。
c代码
如果要使用此方式请务必记得,你操作画面的 Custom Class 一定是UIView才行。画面的Custom Class 为 UIView
2.点击编辑区域意外的地方(UIControl)
收起虚拟键盘的方式与前一种相同,但是如果你的触碰事件里已经且写满了程式码,那么就可以考虑使用,UIControl的Touch Up Inside 事件来收起键盘,方法是将以下程式码与UIcontrol的Touch Up Inside事件连结即可。
c代码
如果要使用此方式,请务必记得,你操作画面的Custom Class 一定要是 UIControl 才行,将收起键盘的方法与UIControl事件连结
3.使用只做收起键盘的按钮
当没有编辑区域以外的地方可供点击来收起键盘,自己制作一个按钮来收起目前的虚拟键盘,也是一个不错的方法,由于按钮必须在虚拟键盘出现才能显示于画面上, 因此必须借用NSNotificationCenter 来帮助我们判断目前键盘的状态,您可以在类似 Observer Pattern 的 NSNotificationCenter 一文中,找到更多关于 NSNotificationCenter 的资讯。
首先在 viewDidLoad: 事件中,向 NSNotificationCenter 进行註册,告诉 NSNotificationCenter 我们的 doneButtonshow: 方法函式,想要订阅有关 UIKeyboardDidShowNotification 的讯息事件。
c代码
现在每当虚拟键盘出现时,就会自动呼叫我们自定义的doneButtonshow:方法函数,接下来只要在刚方法函数里定义按钮出现的方法即可。
c代码
最后是实作按钮按下去时的hideKeyboard:方法函数,务必记得要在函数中移除该按钮。
c代码
4.使用判断段输入字元
如果要使用输入特定字元(例如return换行字元)来收起键盘,必须现在类别内的 @interface区段采用协定。
在采用协定之后,接着实作出协定内的textView:shouldChangeTextInRange:replacementText:方法,此方法函数会在字元输入时触发,而回传的BOOL值则代表该字元是否要作用,下列程式码就是在此方法函数中,使用判断输入字元的方法来收起虚拟键盘(判断字元为return换行字元).
c代码
最后别忘记在viewDidLoad:事件中,将UITextView的代理事件指向自己,这样程式才能正确找到实作协定方法函式的类别。
c代码
使用虚拟键盘来输入资讯,是iOS的重要互动方式之一,虚拟键盘通常会自动出现在可以编辑的UITextField或是 UITextView 的编辑事件中,叫出键盘固然容易,但是要把它收起来,可就没有这么简单,之前在 UITextField 输入结束后的收起小键盘的方式一文中,介绍了如何在编辑完成之后收起虚拟键盘,但是如果您的元件并没有对应的事件可以让你收起虚拟键盘,那又该如何做?下列我们以类似的元件 UITextView 为例,介绍一些通用的方法。
1.点击编辑区以外的地方(UIView)
这是一种很直接的方法,当不再需要使用虚拟键盘的时候,只要点击虚拟键盘和编辑区域以外的地方,就可以将键盘收起,下面程式码是在UIView中内建的触碰事件方法函数。
c代码
-(void)toucheEnded:(NSSet *)touches withEvent:(UIEvent *)event{ if(![myTextView isExclusiveTouch]){ [myTextView resignFirstResponder]; } }
如果要使用此方式请务必记得,你操作画面的 Custom Class 一定是UIView才行。画面的Custom Class 为 UIView
2.点击编辑区域意外的地方(UIControl)
收起虚拟键盘的方式与前一种相同,但是如果你的触碰事件里已经且写满了程式码,那么就可以考虑使用,UIControl的Touch Up Inside 事件来收起键盘,方法是将以下程式码与UIcontrol的Touch Up Inside事件连结即可。
c代码
-(void)dismissKeyboard:(id)sender{ [myTextView resignFirstResponder]; }
如果要使用此方式,请务必记得,你操作画面的Custom Class 一定要是 UIControl 才行,将收起键盘的方法与UIControl事件连结
3.使用只做收起键盘的按钮
当没有编辑区域以外的地方可供点击来收起键盘,自己制作一个按钮来收起目前的虚拟键盘,也是一个不错的方法,由于按钮必须在虚拟键盘出现才能显示于画面上, 因此必须借用NSNotificationCenter 来帮助我们判断目前键盘的状态,您可以在类似 Observer Pattern 的 NSNotificationCenter 一文中,找到更多关于 NSNotificationCenter 的资讯。
首先在 viewDidLoad: 事件中,向 NSNotificationCenter 进行註册,告诉 NSNotificationCenter 我们的 doneButtonshow: 方法函式,想要订阅有关 UIKeyboardDidShowNotification 的讯息事件。
c代码
-(void)viewDidLoad{ [super viewDidLoad]; [NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doneButtonshow:) name: UIKeyboardDidShowNotification object:nil]; }
现在每当虚拟键盘出现时,就会自动呼叫我们自定义的doneButtonshow:方法函数,接下来只要在刚方法函数里定义按钮出现的方法即可。
c代码
-(void)doneButtonshow:(NSNotification *)notification { doneButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; doneButton.frame = CGRectMake(0,228,70,35); [doneButton setTitle:@"完成编辑" forState:UIControlStateNormal]; [doneButton addTarget:self action:@selector(hideKeyboard) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:doneButton]; }
最后是实作按钮按下去时的hideKeyboard:方法函数,务必记得要在函数中移除该按钮。
c代码
-(void)hideKeyboard { [doneButton removeFromSuperview]; [myTextView resignFirstResponder]; }
4.使用判断段输入字元
如果要使用输入特定字元(例如return换行字元)来收起键盘,必须现在类别内的 @interface区段采用协定。
在采用协定之后,接着实作出协定内的textView:shouldChangeTextInRange:replacementText:方法,此方法函数会在字元输入时触发,而回传的BOOL值则代表该字元是否要作用,下列程式码就是在此方法函数中,使用判断输入字元的方法来收起虚拟键盘(判断字元为return换行字元).
c代码
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if ([text isEqualToString:@"\n"]){ [myTextView resignFirstResponder]; return NO; } return YES; }
最后别忘记在viewDidLoad:事件中,将UITextView的代理事件指向自己,这样程式才能正确找到实作协定方法函式的类别。
c代码
-(void)viewDidLoad { [super viewDidLoad]; myTextView.delegate = self; }
相关文章推荐
- iOS深度学习 - Runtime
- iOS 的通知中心简介
- iOS 自动布局小结
- 查看某一个开发者代码修改量的脚本(ios平台可用)
- iOS开发 autoResizingMask使用
- 蜗牛爱课 -- iOS 设计模式之模板模式
- iOS zipzap读取压缩文件
- iOS开发之首次启动的页面设置方法(带导航)
- iOS 生成随机数
- ios推送相关
- iOS 並行編程初步
- iOS 中同一个label设置不同的颜色
- ios NSLog不打印设置
- iOS开发-一行代码搞定自动布局
- iOS开发-block详解
- iOS开发-NSInteger 和 int 的区别
- ios本地通知
- iOS每日一记————————CoreText初识
- iOS 开发小技巧
- iOS开发 根据某个日期计算是星期几