最近做的项目用到好多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,键盘得以隐藏!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/39328.html