- 浏览: 1086469 次
- 性别:
- 来自: 南京
博客专栏
-
Oracle管理和开发
浏览量:349454
最新评论
-
Simon.Ezer:
请问对于“如果非主键字段值发生改变,则不会同步过去”这种情况, ...
创建增量同步Oracle物化视图问题 -
dahai639:
挺好的,支持一下
Oracle的pipelined函数实现高性能大数据处理 -
zealotpz:
不错,原来是用户oracle 的所属组的问题
以sysdba身份登录oracle报ORA-1031权限不足错误之完美分析 -
mikixiyou:
zhangyuslam 写道如果担心全局索引失效,可以使用如下 ...
Oracle分区表的分区交互技术实现数据快速转移 -
sea0108:
...
Oracle sql loader使用速成
在iOS应用开发中,有三类视图对象会打开虚拟键盘,进行输入操作,但如何关闭虚拟键盘,却没有提供自动化的方法。这个需要我们自己去实现。这三类视图对象分别是UITextField,UITextView和UISearchBar。
这里介绍一下UITextField中关闭虚拟键盘的几种方法。
(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1753330 )
第一种方法,使用它的委托UITextFieldDelegate中的方法textFieldShouldReturn:来关闭虚拟键盘。
在UITextField视图对象如birdNameInput所在的类中实现这个方法。
- (BOOL)textFieldShouldReturn:(UITextField *)textField { if ((textField == self.birdNameInput) || (textField == self.locationInput)) { [textField resignFirstResponder]; } return YES; }
这样,在输入框birdNameInput中打开虚拟键盘后,轻击键盘的return键就会自动关闭掉虚拟键盘。
第二种方法,将birdNameInput的属性中Return Key修改为done,再定义一个方法和Done键的Did End On Exit连接。通过轻击done键触发这个事件来关闭虚拟键盘。
定义的方法如下:
- (IBAction) textFieldDoneEditing:(id)sender { [sender resignFirstResponder]; }
这两个方法都是轻击虚拟键盘上一个键来关闭它。这属于精确操作,而手指不像鼠标,做这种操作不容易。因此就UI层面而言,这两个方法都不是最好的方法。
在iphone或ipad屏幕上,虚拟键盘占用的面积大小是有限的。通过轻击虚拟键盘之外的区域而关闭虚拟键盘。
第三种方法,通过轻击键盘之外的空白区域关闭虚拟键盘。
在birdNameInput所属的视图控制器类的viewDidLoad方法中定义一个UITapGestureRecognizer的对象,然后将它赋值为它的视图。
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; [self.view addGestureRecognizer:tap]; [tap release];
再定义一下选择器调用的方法dismissKeyboard。
-(void)dismissKeyboard { [birdNameInput resignFirstResponder]; }
如果屏幕上有多个textField的话,一个一个地列出来就有些麻烦。那么将方法修改一下,如下:
-(void)dismissKeyboard { NSArray *subviews = [self.view subviews]; for (id objInput in subviews) { if ([objInput isKindOfClass:[UITextField class]]) { UITextField *theTextField = objInput; if ([objInput isFirstResponder]) { [theTextField resignFirstResponder]; } } } }
如果这个屏幕上的视图对象很复杂的话,另当别论。
这个方法是编码新建一个手势对象。也可以直接使用interface builder图形化开发工具,在storyboard中拉入一个手势对象到视图控制器类中,再将此手势对象建立一个IBACTION,名称可以是dismissKeyboard。
第四种方法,通过轻击键盘之外的空白区域关闭虚拟键盘。
将屏幕上的view也就是textField的父视图拖一个touch down事件出来,和一个能关闭虚拟键盘的方法连接。如果视图没有touch down事件,可将view的父类从UIView修改为UIButton。
首先定义并实现一个方法backgroundTap:。
- (IBAction) backgroundTap:(id)sender { NSArray *subviews = [self.view subviews]; for (id objInput in subviews) { if ([objInput isKindOfClass:[UITextField class]]) { UITextField *theTextField = objInput; if ([objInput isFirstResponder]) { [theTextField resignFirstResponder]; } } } }
然后选择背景视图的Touch Down事件,连接 backgroundTap:即可。这样只要轻击一下虚拟键盘之外的区域,就能关闭虚拟键盘。这些方法都是使用resignFirstResponder方法来关闭虚拟键盘,还有其他的方法。
第五种方法,使用endEditing:方法
在所在的视图控制器类中,覆盖这个方法。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [[self view] endEditing:YES]; }
This method looks at the current view and its subview hierarchy for the text field that is currently the first responder. If it finds one, it asks that text field to resign as first responder. If the force parameter is set to YES, the text field is never even asked; it is forced to resign.
但是,如果这个屏幕很复杂,虚拟键盘之外的区域中有很多按钮。轻击这些区域时可能会轻击到这些按钮,这样虚拟键盘就不能关闭。
要是找到一个没有按钮的空白区域都不容易且还有隐藏的视图对象时,通过轻击虚拟键盘之外的区域关闭虚拟键盘的方法实现起来就难了。
第六种方法,覆盖hitTest:withEvent:方法关闭虚拟键盘
在stackoverflow.com上,有人这样总结。说使用hitTest:withEvent:方法是最好的,也是最容易的解决方法。
I think the easiest (and best) way to do this is to subclass your global view and use hitTest:withEvent method to listen to any touch.
Touches on keyboard aren't registered, so hitTest:withEvent is only called when you touch/scroll/swipe/pinch... somewhere else, then call [self endEditing:YES].
This is better than using touchesBegan because touchesBegan are not called if you click on a button on top of the view.
It is better than UITapGestureRecognizer which can't recognize a scrolling gesture for example. It is also better than using a dim screen because in a complexe and dynamic user interface, you can't put dim screen every where. Moreover, it doesn't block other actions, you don't need to tap twice to select a button outside (like in the case of a UIPopover).
Also, it's better than calling [textField resignFirstResponder], because you may have many text fields on screen, so this works for all of them.
因此,我再建立一个继承UIView的视图类。在这个视图类中,覆盖hitTest:withEvent:方法,增加[self endEditing:YES]方法。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { UIView *result = [super hitTest:point withEvent:event]; [self endEditing:YES] return result; }
我将视图控制器的主视图所属类修改为这个新建视图类。这样在屏幕上轻击任何位置都会关闭虚拟键盘。
这个方法是最简单,也是最好的关闭虚拟键盘的方法。
使用好hitTest:withEvent:这个方法,还可以实现很多很复杂的功能。
The implementation of hitTest:withEvent: in UIResponder does the following:
- It calls pointInside:withEvent: of self
- If the return is NO, hitTest:withEvent: returns nil. the end of the story.
- If the return is YES, it sends hitTest:withEvent: messages to its subviews. it starts from the top-level subview, and continues to other views until a subview returns a non-nil object, or all subviews receive the message.
- If a subview returns a non-nil object in the first time, the first hitTest:withEvent: returns that object. the end of the story.
- If no subview returns a non-nil object, the first hitTest:withEvent: returns self
This process repeats recursively, so normally the leaf view of the view hierarchy is returned eventually.
However, you might override hitTest:withEvent to do something differently. In many cases, overriding pointInside:withEvent: is simpler and still provides enough options to tweak event handling in your application.
发表评论
-
在storyboard中view的frame值为0
2013-01-23 13:42 9812在XCode4.5中,我使用storyboard创建一个U ... -
使用UIScrollView和UIPageControl显示半透明帮助蒙板
2012-12-31 13:25 0http://www.cnblogs.com/every200 ... -
char,short ,int ,long,long long,unsigned long long数据范围
2012-12-26 14:02 14351编程语言的基础类型速查表 char -128 ~ +12 ... -
通过segue切换视图控制器
2012-12-21 11:43 3784在使用storyboard开发iOS应用时,从一个视图控制器的 ... -
NSUnknownKeyException
2012-12-20 21:21 0在写测试程序时,出现下面这个exception, ... -
segue分析小结
2012-12-12 10:15 11018在iOS开发中,segue用来实现storyboard中源视图 ... -
http://stackoverflow.com/questions/7301607/tableview-app-terminated-due-to-nsint
2012-12-08 20:36 0http://stackoverflow.com/questi ... -
Delegate分析小结
2012-12-07 17:29 0Delegate的用途: 用于改变或控制其他对象 。 D ... -
Objective-C的内省(Introspection)小结
2012-12-07 17:02 10492内省(Introspection)是面向对象语言和环境的一个强 ... -
UIApplicationDelegate分析小结
2012-12-06 14:52 13552我们开发出来的运行在iOS平台上的应用程序都有一个UIAppl ... -
NSClassFromString和NSStringFromClass
2012-11-30 17:31 0NSClassFromString 将NSString转换成一 ... -
面向对象的最重要思想-间接
2012-11-28 15:20 0面向对象的最重要思想-间接 -
objective-c的实例变量assign和retain
2012-11-01 11:17 0当和objective-c 对象工作时, assig ... -
Objective-C自学进阶书籍
2012-10-30 09:58 0The Objective-C Programming Lan ... -
objective-c数组使用小结
2012-10-17 15:40 3366使用数组对象创建的数组功能非常强大,在Java语言或者C语言中 ... -
NSString对象的初始化和比较
2012-10-17 13:31 3078NSSting的对象在使用@"xx"直接初 ... -
objective-c的对象定义
2012-10-16 14:39 894在objective-c中定义两个类,用于测试对象的定义操作。 ... -
How To Synchronize Core Data with a Web Service
2012-09-03 13:59 0http://www.raywenderlich.com/15 ... -
NSMutableString转换成NSString的N种方法
2012-08-14 10:35 18027NSString是一个不可变的字符串对象。这不是表示这个对象声 ... -
Objective-c中数字型字符串转换NSNumber的三种方法
2012-08-08 10:20 24477在MAC OS/iOS 开发时,我们会遇到这类情况。如 ...
相关推荐
jQuery苹果IOS虚拟键盘基于jquery.1.11.3.min.js制作,有全功能键盘、数字键盘两种形式。
ios7隐藏虚拟键盘,解决键盘挡住UITextField问题
这里介绍一下UITextField中关闭虚拟键盘的几种方法。 第一种方法,使用它的委托UITextFieldDelegate中的方法textFieldShouldReturn:来关闭虚拟键盘。 在UITextField视图对象如birdNameInput所在的类中实现这个方法...
在iOS虚拟键盘上添加动态隐藏按钮Demo http://blog.csdn.net/duxinfeng2010/article/category/1155790 有详细介绍
http://blog.csdn.net/duxinfeng2010/article/category/1155790 有相关介绍
ios自定义键盘附件关闭键盘,objective-c语言
iOS中几种截取屏幕图片的方式,从网上搜集的不错的方法
iOS随机排列0-9数字,因为面试时遇到如何实现随机键盘,提供一个思路供参考
苹果虚拟摄像头|无人直播|虚拟相机deb|硬改手机摄像头|搬运去重|tiktok抖音搬运直播ios无人直播虚拟视频虚拟相机deb文件ios虚拟视频无人直播-appel6键deb最新版摄像头模块,不限时长,高清不卡顿!ios虚拟视频无人...
这是一种很直觉的方法,当不再需要使用虚拟键盘时,只要点击虚拟键盘和编辑区域外的地方,就可以将键盘收起,下面程式码是在 UIView 中内建的触碰事件方法函式,您可以参考 Touch Panel / 触碰萤幕 / 压力感应器的...
对于 iPad 程序,其键盘有一个按钮可以用来关闭键盘,但是 iPhone 程序中的键盘却没有这样的按钮,不过我们可以采取一些方法关闭它。例如,我们可以实现按下 Rerun (有时也是 Done、Research 等)键关闭键盘,或者...
官方下载的SneakInput例子,真机测试可用。iOS开发动作,射击类游戏可以参考。 个人觉得虽然已经实现了全部需求,但是虚拟手柄的触感确实没有真实手柄效果好
iOS软键盘当被遮挡时,自动弹起,点击return时隐藏软键盘,点击外部UIView时,隐藏软键盘
和IOS原生键盘基本一致,可以自定义键盘上的文字,对于一些什么偏远地区的语言IOS原来没有的,可以自定义文字。另外加了键盘的随机分布,只需要在初始化的时候设置isRandomKeyBoard属性,即可每次触发键盘时,键盘...
iOS 自定义输入键盘
ios无人直播-虚拟视频-刷脸 打开相机播放指定视频 视频内录搬运 iphone全局 deb文件完整版 直接安装即可文件内包含了视频使用说明 还有安装步骤 不明白也可以联系我 有言必回
iOS7虚拟键盘的那些隐藏功能.docx
IOS恢复的2种方法,很好的东东!共享啦!!!
表情显示YYText,、表情键盘、富文本、评论输入框、聊天输入框、UICollectionView图片拖动、@选人、范围选人、图片压缩、缓存、仿微博发布界面,