IOS研究之多个UITextField的键盘处理

在IOS开发中使用UITextField时常需要考虑的问题就是键盘的处理。有时候,弹出的键盘会将UITextField区域覆盖,影响用户输入。这个时候就要将视图上移。这个时候我们需要考虑两点:

1,修改视图坐标的时机;

2,上移的偏移是多大。

3,UITableView设置Section间距 不明白的可以看看。

我根据自己实际操作的实现方法如下:

1,获取正在编辑的UITextField的指针

定义一个全局的UITextField的指针

UITextField *tempTextFiled;

在UITextFieldDelegate代理方法-(void)textFieldDidBeginEditing:(UITextField *)textField

修正tempTextFiled的值为当前正在编辑的UITextField的地址。

-(void)textFieldDidBeginEditing:(UITextField *)textField

{

tempTextFiled = textField;

}

2,配置键盘处理事件

在- (void)viewDidLoad中实现键盘监听:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

实现键盘显示和键盘隐藏方法

在键盘显示方法中获取键盘高度,并配置键盘视图位移【值得一提的是,该方法会在用户切换中英文输入法的时候也会执行,因此不必担心在切换到中文输入法时键盘有多出一部分的问题】。

- (void)keyboardWillShow:(NSNotification *)notification

{

NSDictionary * info = [notification userInfo];

NSValue *avalue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];

CGRect keyboardRect = [self.view convertRect:[avalue CGRectValue] fromView:nil];

double keyboardHeight=keyboardRect.size.height;//键盘的高度

NSLog(@"textField superview].frame.origin.y = %f",[tempTextFiled superview].frame.origin.y);

NSLog(@"keyboardHeight = %f",keyboardHeight);

if ( ([tempTextFiled superview].frame.origin.y + keyboardHeight + REGISTERTABLE_CELL_HEGHIT) >= ([[UIScreen mainScreen] bounds].size.height-44))

{

//此时,编辑框被键盘盖住,则对视图做对应的位移

CGRect frame =  CGRectMake(0, 44, 320, [[UIScreen mainScreen] bounds].size.height-45);

frame.origin.y -= [tempTextFiled superview].frame.origin.y + keyboardHeight + REGISTERTABLE_CELL_HEGHIT +20 - [[UIScreen mainScreen] bounds].size.height + 44;//偏移量=编辑框原点Y值+键盘高度+编辑框高度-屏幕高度

registerTableView.frame=frame;

}

}

然后实现键盘隐藏的处理:

在UITextFieldDelegate代理方法

-(void)textFieldDidEndEditing:(UITextField *)textFieldView或者

- (void)keyboardWillHide:(NSNotification *)notification

方法中实现视图复位,如下代码:

CGRect frame =  registerTableView.frame;

frame.origin.y  = 44;//修改视图的原点Y坐标即可。

registerTableView.frame=frame;

3,移除监听

在-(void)viewDidDisappear:(BOOL)animated或者dealloc方法中移除监听

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

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

这样,无论我们的界面上有多少UITextField,只需要简单的几部就可以实现UITextField不被键盘盖住。

IOS研究之多个UITextField的键盘处理

时间: 2024-10-14 13:01:21

IOS研究之多个UITextField的键盘处理的相关文章

iOS系列 基础篇 08 文本与键盘

iOS系列 基础篇 08 文本与键盘 目录: 1. 扯扯犊子 2. TextField 3. TextView 4. 键盘的打开和关闭 5. 打开/关闭键盘的通知 6. 键盘的种类 7. 最后再扯两句 1. 扯扯犊子 与Label一样,TextField和TextView也是文本类控件,是可以编辑文本内容的. 在控件内容编辑方面,三者都可以通过代码.双击该控件和属性检查器中的Text属性来实现,但是TextField和TextView比Label多了一个键盘的使用. 另外,TextField和T

IOS开发之自定义系统弹出键盘上方的view

IOS开发之自定义系统弹出键盘上方的view 分类: IOS 2014-11-18 09:26 1304人阅读 评论(0) 收藏 举报 目录(?)[+] 这篇文章解决的一个开发中的实际问题就是:当弹出键盘时,自定义键盘上方的view.目前就我的经验来看,有两种解决方法.一个就是利用 UITextField或者UITextView的inputAccessoryView属性,另一种,就是监听键盘弹出的notification来自 己解决相关视图的位置问题. 第一种解决方法相对比较简单,第二种的方法中

IOS研究之App转让流程须知详细介绍

 网络上有很多开发者提问怎么转让App并想知道具体的流程.实际上Appstore的App转让流程还是比较简单的,下面特酷吧根据自己的实际操作总结下iOS Appstore中App的转让流程,供大家参考.对网络开发不明白的朋友可以看IOS研究之网络编程Cocoa Streams使用详解 一,App的转让 (1)App转让的条件 至少有在Appstore上发售的版本,即应用状态为:"ready for sale".其他一些条件参考itunes connect中应用详情页面点击"

在UITableViewController里面实现UITextField与键盘的自适应

tableview里面对textfield的键盘适应本身就是逻辑实现,利用下面代理函数将textfield的位置移到最优点. //将活跃的textview移动到tableview的中间 - (void)textFieldDidBeginEditing:(UITextField*)textField { UITableViewCell* cell = [self parentCellFor:textField]; if (cell) { NSIndexPath* indexPath = [self

IOS研究之iOS7适配的使用详细说明

近日,我对项目进行了iOS7适配,迟迟没有使用7.0SDK是因为旧工程使用iOS7.0有一些问题,趁着这次机会,我详细整理了适配iOS7需要注意的几个地方.记录如下: 一,iOS7 UITableViewCell适配 (1)iOS7 UITableViewCell背景色 在iOS7之前UITableViewCell的backgroundColor是透明的,但在iOS7中默认白色背景,如果使用iOS7 SDK的UITableViewCell显示不正常,只需要需修改: [cell setBackgr

IOS研究之网络编程(二)-Cocoa Streams使用详解

 本文以及相关的系列文章是我总结的iOS网络开发方面的知识点,本文是第二篇,主要分析了Cocoa Streams中的几个重要类 Cocoa Streams实际上是Objective-C对CFNetwork的简单封装,主要包含了三个类:NSStream, NSInputStream, and NSOutputStream.本部分的接口接口比较简单,用法一目了然.我在这里就只列出接口,方便查阅.对CFNnework不明白的看IOS研究之网络编程(一)-CFNetwork使用详解 NSStream

[转载]IOS研究之App转让流程须知详细介绍

原文地址:http://www.tuicool.com/articles/uQRF3yM 网络上有很多开发者提问怎么转让App并想知道具体的流程.实际上Appstore的App转让流程还是比较简单的,下面特酷吧根据自己的实际操作总结下iOS Appstore中App的转让流程,供大家参考.对网络开发不明白的朋友可以看  IOS研究之网络编程Cocoa Streams使用详解 一,  App的转让 (1)App转让的条件 至少有在Appstore上发售的版本,即应用状态为:”ready for s

俩个月的IOS研究-记

这是自己的第一遍博客,注册博客园已经好几个月了,因为今天回复一个帖子加图片要先开通博客,所以就顺手过来记载些东西.刚毕业的时候做嵌入式的,做的都是C的东西,大概有一年半.年初离职后,在新公司写上脚本了,8月底项目结束后,老板想在公司增加IOS技术,所以让暂时处于空闲的我研究IOS了.从9月1号拿到黑苹果开始,我的IOS研究之路起航了.快2个月了,完全自己一个人在搞,没一个人帮忙,整个公司就我自己做这个方向,有时候好无助,遇到问题只能自己苦思冥想,或者上园子里溜溜寻求帮助.第一个月基于一个云通讯平

关于 UITextField 和 键盘 的通知、代理调用顺序

从点击UITextField到键盘弹出完成,调用代理方法或发通知的顺序 textFieldShouldBeginEditing: (调代理) textFieldDidBeginEditing: (调代理) UITextFieldTextDidBeginEditingNotification (发通知) UIKeyboardWillChangeFrameNotification (发通知) UIKeyboardWillShowNotification (发通知) UIKeyboardDidShow