ios键盘输入屏幕上移的效果
ios键盘输入屏幕上移的效果,在开发中会发现,在iOS开发中经常是会遇到一个键盘遮挡屏幕的一个情况出现,就比如当你输入账号密码的时候,会出现遮挡了一半的位置,甚至是更多的位置最关键的是会遮挡了下面的一些按钮,导致按钮事件也触发不了,目前解决的办法就是在当输入这些消息的时候如何让整个屏幕上移一个键盘的位置,又或者是移动到指定的一些位置也是可以的。
首先一般输入的话都用的是UITextField,所以要监听用户什么时候开始输入和什么时候结束输入,直接设置代理代理就行了。
要遵循UITextFieldDelegate协议。
//遵循协议
@interfaceViewController()
//设置相关的属性
@property(nonatomic,strong)UITextField*UITF;
//设置代理
UITF.delegate=self;
//代理的方法
//键盘弹出时屏幕上移
-(void)textFieldDidBeginEditing:(UITextField*)textField
{
//假如多个输入,比如注册和登录,这就是可以根据不同的输入框来上移不同的位置,从而使得更加具有人性化。
//键盘高度216
//滑动效果(动画显示)
NSTimeIntervalanimationDuration=0.30f;
[UIViewbeginAnimations:@"ResizeForKeyboard"context:nil];
[UIViewsetAnimationDuration:animationDuration];
//表示将视图的Y坐标向上移动,以使下面腾出地方用于软键盘的显示
self.view.frame=CGRectMake(0.0f,-100.0f/*屏幕上移的高度,可以自己定*/,self.view.frame.size.width,self.view.frame.size.height);
[UIViewcommitAnimations];
}
//取消第一响应,意思是输入完毕,屏幕恢复原状
-(void)textFieldDidEndEditing:(UITextField*)textField
{
//滑动的一个效果
NSTimeIntervalanimationDuration=0.30f;
[UIViewbeginAnimations:@"ResizeForKeyboard"context:nil];
[UIViewsetAnimationDuration:animationDuration];
//恢复屏幕的代码
self.view.frame=CGRectMake(0.0f,0.0f,self.view.frame.size.width,self.view.frame.size.height);
[UIViewcommitAnimations];
}
接下里说一下如何取消第一响应。
实际上一般都是在当前View上添加一个点击手势就可以了,这样的话就可以取消键盘的第一响应,它的弊端就是,比如:因为注册登录页面当屏幕上移时,就会显示注册或登录的页面,如果添加点击手势的话那么就会覆盖掉按钮的点击事件,意思也就是当你明明看到了按钮,但是点击却没反应,我们该怎么解决这个问题呢?
那么如何实现注册登录的按钮事件都在,当点击其它的地方还能取消键盘的第一响应?
实际上是比较简单的,我的解决办法是这样的:
首先是去创建一个按钮,需要是和屏幕一样大,把所有的控件全部都放到这个按钮上,而这个按钮的点击事件就是取消输入框的第一响应,使用这个方式就可以了。
ios开发是一个综合能力的开发,想要达到底部控件随着键盘的弹出而上移的效果,那么我们必然需要的到键盘在弹出时的高度,以及原点坐标。
大概的一个思路就是,用view的高度-键盘弹出时的高度,得到的值就是底部控件与view底部之间的距离,在整个效果完成的过程中,我们只需要调整控件与底部之间的距离即可,而不是控件与键盘之间的距离,这是一个思路。