UITextField点击textField外任意区域键盘回收(二)---- TouchesBegan

来源:互联网 发布:大数据技术相关书籍 编辑:程序博客网 时间:2024/06/11 07:43

最近做的项目用到好多textField, 涉及到键盘回收,键盘挡住textField 上移textField等,自己水平不够,深感textfield好复杂,想好好整理下自己会得用法,继续学习不会的用法。。

键盘回收有好多中方法:UITextFieldDelegate, 在self.view上添加UIControl, TouchesBegan方法,[UIAppllication shareApplication]方法

其中点击textField外任意区域回收键盘,这三种方法可以实现:self.view上添加UIControl, TouchesBegan方法,[UIAppllication shareApplication]


方法2

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

只用UITextField代理方法回收键盘方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField{    [textField resignFirstResponder];    return YES;}

这样的方法在textField很多时变得不好管理,得为那么多的textField指定delegate,会费很多代码。


我们来看另一种方法touchesBegan,在一个UIView类中实现该方法,将view的endEditing置为YES即可实现。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{    [super touchesBegan:touches withEvent:event];    [self.view endEditing:YES];}

这样,当点击UIView中非可编辑框的地方时,UIView会捕获触摸事件,调用上面的方法,这样UIView的endEditing属性变为YES,UIView及其subViews上所有的编辑框都会resignFirstResponder。
- (BOOL)endEditing:(BOOL)force

在使用该方法的时候,我遇到了一个问题,就是我的UITextField是加在UIScrollView上的,然后还有个tableView加在UIScrollView上的(tableView先加到scrollView上),scrollView才是加在UIView上的。这样以来,我点击UITextField以外的地方,没有任何反应,touchesBegan不会调用。这里的原因在于,我点击UITextField以外的区域,实际是点击了tableView,tableView捕获点击事件,可它不会传递该事件。怎么办呢?可以自己写一个类,继承UITableView,然后在自己的类中重写touchesBegan等方法。思路就是这样,下面我示例一下自己这种情况下的实现。

自己写一个继承自UITableView的类,重写以下方法。

#import "JYUITableView.h"@implementation JYUITableView-(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view{        return YES;}-(BOOL)touchesShouldCancelInContentView:(UIView *)view{    return NO;}-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{    [super touchesBegan:touches withEvent:event];    [self.superview endEditing:YES];}-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{    }

用这个类来创建自己的UITableView对象,而这个对象是加在scrollView上的,它的superview就是scrollView。当点击这个tableView时,它调用touchesBegan方法,在这个方法中,把它的父视图(scrollView)的endEditing设置为YES,那么scrollView上的所有UITextField都resignFirstResponder,键盘得以隐藏!


0 0
原创粉丝点击