博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios键盘遮挡UITextField问题
阅读量:6435 次
发布时间:2019-06-23

本文共 2441 字,大约阅读时间需要 8 分钟。

在init方法里注册这两个通知

    [[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(keyboardwasShown:) name:UIKeyboardDidShowNotificationobject:nil];

    [[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(keyboardwasHidden:) name:UIKeyboardDidHideNotificationobject:nil];

别忘了在dealloc里移除通知中心

[[NSNotificationCenter defaultCenter]removeObserver:self name:UIKeyboardDidShowNotification object:nil];    [[NSNotificationCenter defaultCenter]removeObserver:self name:UIKeyboardDidHideNotification object:nil];

下面是通知调用的两个方法,这里的两个通知中心只需要注册,不需要发送消息。

-(void)keyboardwasShown:(NSNotification *) notify{        NSTimeInterval animationDuration = 0.15f;    [UIView beginAnimations:nil context:nil];    [UIView setAnimationDuration:animationDuration];    [UIView setAnimationCurve:UIViewAnimationCurveLinear];        CGRect frame = self.frame;                frame.origin.y -=216;//216是iphone键盘高,ipad是352,也可以自定义上移的高度        frame.size.height +=216;        self.frame = frame;    [UIView commitAnimations];    }-(void) keyboardwasHidden:(NSNotification *) notify{    if (height == 0) {        return ;    }else{    NSTimeInterval animationDuration = 0.15f;        [UIView beginAnimations:nil context:nil];        [UIView setAnimationDuration:animationDuration];        [UIView setAnimationCurve:UIViewAnimationCurveLinear];    CGRect frame = self.frame;            frame.origin.y +=216;            frame.size.height -=216;     self.frame = frame;    [UIView commitAnimations];        height = 0;    }}

下面这个代理方法在编辑的时候触发

- (void)textFieldDidBeginEditing:(UITextField *)textField{        NSlog(@"执行了");}

或者直接用Xib连线也能触发。

下面再介绍一种方便的方法,先铺一个scrollview,在它上面放UITextField,不过要注意,连线的时候要把Editing Did Begin和Editing Did End连到同两个方法上,这样当开始编辑和结束编辑的时候可触发两个不同的方法

下面是这两个方法的实现

- (IBAction)userNameDidBegin:(id)sender {
//这里添加了一个滚动的动画 [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.15];//开始编辑的时候,让_scrollView滚到CGPointMake(0, 216); CGPoint offset = CGPointMake(0, 216); [_scrollView setContentOffset:offset animated:YES]; [UIView commitAnimations];}- (IBAction)tapInputUserName:(id)sender { [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.15];//结束编辑的时候,让_scrollView滚到CGPointMake(0, 0); CGPoint offset = CGPointMake(0, 0); [_scrollView setContentOffset:offset animated:YES]; [UIView commitAnimations];}

 

转载于:https://www.cnblogs.com/xiaobaizhu/archive/2013/05/26/3100493.html

你可能感兴趣的文章
seafile服务器配置
查看>>
HyperLedger Fabric 1.2 区块链应用场景(3.1)
查看>>
也谈谈初创公司的技术团队建设
查看>>
关于 Django 开发的 11 件事
查看>>
Android屏蔽隐藏系统自带输入键盘
查看>>
阿里云 APM 解决方案地图
查看>>
中国HBase技术社区第一届MeetUp-HBase2.0研讨圆桌会
查看>>
阿里云服务器亚太南部 1、亚太南部 2、亚太东北 1、 亚太东北 2是哪个城市
查看>>
学渣的模块化之路——50行代码带你手写一个common.js规范
查看>>
把前端监控做到极致
查看>>
python——变量
查看>>
subline上装node.js插件
查看>>
H3C虚拟化之IRF
查看>>
python字符串操作实方法大合集
查看>>
JAVA 设计模式 访问者模式
查看>>
上云时代业务压测的重要性,你知道多少?
查看>>
Linux学习(十一):不可忽略的Linux支持的文件系统
查看>>
[转]VC++中操作XML(MFC、SDK)
查看>>
WiFi连接风险造成个人信息外泄 网络安全需加强
查看>>
2017(中国)商博会系列介绍之智能生活展
查看>>