最近转入ios开发,发现ios的UITextField如果在屏幕的最底部的时候,键盘不能自动的调整界面的布局,需要手动的调整位置才可以,所以自己研究和拿着笔话,想写一个通用的方法来实现每一个界面自动适配键盘的位置,这样的话,不用每一个界面去操作界面的位置了,具体的解决方案如下:
1. 先创建一个UIViewController 这个UIViewController作为父类,让以后的每一个界面继承这个界面,在这个界面里面实现一个委托,代码如下:
@interface BaseViewController : UIViewController
2.在这个BaseViewCOntroller.m文件中,现实UITextFieldDelegate中的两个方法,textFieldDidBeginEditing(开始编辑UITextField和 textFieldDidEndEditing(结束编辑UITextField),大家都知道,iphone的键盘都是固定的,都是系统自带的,没有第三方的输入法的,所以键盘的高度是固定的216,我们只要在开始编辑的时候,计算一下当前的UITextField的所在高度相对底部是否有216(就是UITextField的底部边缘相对屏幕的底部是否有216个长度),如果不够216,就需要把整体的view上移达到216高度即可;当我们结束编辑的时候,把之前增加的高度相反操作即可,代码如下:
//设置调整界面的动画效果//设置调整界面的动画效果
int prewTag ; //编辑上一个UITextField的TAG,需要在XIB文件中定义或者程序中添加,不能让两个控件的TAG相同
float prewMoveY; //编辑的时候移动的高度
// 下面两个方法是为了防止TextFiled让键盘挡住的方法
-(void) textFieldDidBeginEditing:(UITextField *)textField
{
CGRect textFrame = textField.frame;
float textY = textFrame.origin.y+textFrame.size.height;
float bottomY = self.view.frame.size.height-textY;
if(bottomY>=216) //判断当前的高度是否已经有216,如果超过了就不需要再移动主界面的View高度
{
prewTag = -1;
return;
}
prewTag = textField.tag;
float moveY = 216-bottomY;
prewMoveY = moveY;
NSTimeInterval animationDuration = 0.30f;
CGRect frame = self.view.frame;
frame.origin.y -=moveY;//view的Y轴上移
frame.size.height +=moveY; //View的高度增加
self.view.frame = frame;
[UIView beginAnimations:@"ResizeView" context:nil];
[UIView setAnimationDuration:animationDuration];
self.view.frame = frame;
[UIView commitAnimations];//设置调整界面的动画效果
}
-(void) textFieldDidEndEditing:(UITextField *)textField
{
if(prewTag == -1) //当编辑的View不是需要移动的View
{
return;
}
float moveY ;
NSTimeInterval animationDuration = 0.30f;
CGRect frame = self.view.frame;
if(prewTag == textField.tag) //当结束编辑的View的TAG是上次的就移动
{ //还原界面
moveY = prewMoveY;
frame.origin.y +=moveY;
frame.size. height -=moveY;
self.view.frame = frame;
}
//self.view移回原位置
[UIView beginAnimations:@"ResizeView" context:nil];
[UIView setAnimationDuration:animationDuration];
self.view.frame = frame;
[UIView commitAnimations];
[textField resignFirstResponder];
}
3.在上面的代码中,我们已经增加了委托对UITextField的编辑监听,下面我们就要让我们的子类UIViewController去监听委托
代码:
IDNameField.delegate = self;
IDNameField是我继承BaseViewController的子类UIViewController中的一个UITextField,只要实现了上面的操作,我们的UITextField就可以在每一个界面实现自动适配调整界面,达到防止键盘挡住UITextField的效果了
分享到:
相关推荐
在iOS开发中,特别是在iOS 7及更高版本中,用户界面设计的一个常见问题是虚拟键盘弹出时会遮挡UITextField或UITextView,导致用户无法看到正在输入的文本。本篇文章将详细探讨如何解决这一问题,主要关注如何在iOS 7...
在iOS开发中,`UITextField` 是一个非常常见的控件,用于接收用户输入文本。然而,标准的`UITextField`并未提供方便的键盘管理功能,尤其是在移动设备上,键盘弹出可能会遮挡部分界面,影响用户体验。标题提到的"iOS...
在iOS应用开发中,UITextField是苹果提供的一个核心控件,用于接收用户输入的文本信息。这个控件在各种场景下非常常见,如登录界面的用户名和密码输入、搜索框等。在本“UITextField 文本字段控件 - iOS开发”小Demo...
在iOS开发中,当用户需要在UITextField或UITextView中输入时,键盘的弹出会遮挡部分内容,特别是当这些输入控件位于UIScrollView等可滚动视图上时。标题"ios-键盘不覆盖UITextField和UITextView输入框.zip"所提及的...
标题"iOS解决输入框被键盘遮挡问题"直指这一常见痛点,描述指出了解决方案——在键盘弹出时,界面向上移动以确保输入框始终可见。以下将详细阐述如何处理这个问题。 首先,我们需要理解iOS中的键盘管理机制。当用户...
总的来说,这个自定义数字键盘的实现涉及到了Objective-C的面向对象编程、UI设计、事件处理、用户交互等多个方面,是iOS开发中的一个典型应用场景。通过这样的自定义,不仅可以提高用户体验,也能更好地满足项目特定...
在iOS开发中,UITextField是一个常用且重要的组件,它允许用户输入文本数据。然而,在某些特定的应用场景下,我们可能不希望UITextField在用户进行长按、双击等操作时弹出复制粘贴框。这是因为复制粘贴框可能会干扰...
首先,我们需要理解iOS中的键盘类型。默认情况下,iOS提供多种键盘类型,如ASCII Capable、Number Pad、Phone Pad等。然而,对于特定场景,如快速录入数字,自定义键盘可以提供更高的效率和定制化程度。 1. **创建...
在iOS开发中,`UITextField`是用户界面中用于单行文本输入的标准组件。然而,有时候我们可能需要`UITextField`能够支持多行文本输入,也就是自动换行,这在处理长文本或者用户需要填写段落信息时非常有用。本文将...
IOS 键盘挡住输入框的问题是一个常见的问题,在 iOS 开发中,我们经常遇到这种情况:当用户开始输入时,键盘弹出,挡住输入框,使用户无法看到实时的输入情况。这对用户体验非常不友好。下面我们将介绍解决这个问题...
在"ios-UITextField邮箱后缀联想输入.zip"项目中,开发者`cheng534078182`提供了一个名为`TextMatchEmail`的解决方案。这个项目利用了`UITextField`的`UITextFieldDelegate`协议,尤其是`textField(_:...
首先,我们需要理解iOS中处理键盘的基本流程。当用户点击UITextField或UITextView时,系统会自动显示键盘。为了实现隐藏键盘的功能,我们需要监听UIResponder的`textFieldShouldReturn:`或`textViewShouldReturn:`...
在iOS开发中,`UITextField`是用户界面中用于输入文本的基本元素。它的功能强大且灵活,可以用于创建各种形式的文本输入字段,如用户名、密码输入框等。本篇文章将详细探讨如何实现`UITextField`的键盘管理,包括...
在iOS中,我们可以使用UIActivityIndicatorView显示加载指示器,配合UIView的alpha或遮罩层来实现界面的半透明效果,让用户知道应用正在执行后台任务。对于全屏加载,可以使用UIProgressView或自定义视图来创建...
本教程将详细介绍如何在iOS中自定义一个专用于身份证输入的数字键盘,实现方法包括创建自定义键盘视图以及通过代理进行通信。 首先,我们需要创建一个自定义键盘视图。这个视图应包含0-9的数字键以及一个“x”键,...
UITextField和UITextView,前者是单行输入文本框,后者是可滑动的多行输入文本框,在这整个开发过程中,我们需要控制键盘的弹出和收起、在输入结束的时候获取输入的信息,此外,我们还需要保证在键盘弹起的时候不...
UITextField是IOS开发中用户交互中重要的一个控件,常被用来做账号密码框,输入信息框等。 观察效果图 UITextField有以下几种特点: 1.默认占位文字是灰色的 2.当光标点上去时,占位文字变为白色 3.光标是白色...
在iOS开发中,自定义键盘是一项常见的需求,它允许开发者为特定应用或场景提供更为个性化或功能丰富的输入体验。本文将深入探讨如何在Swift中实现iOS的自定义键盘。 首先,我们要了解iOS的键盘体系。iOS系统原生...
UITextField是iOS中的文本输入控件,用户可以在此输入单行文本。在用户开始编辑文本时,系统会自动弹出键盘,但默认情况下,键盘的出现并不会改变UITextField的位置。为了优化用户体验,开发者需要手动处理键盘的...