在网上找到的资料比较零散,这部分学起来感觉也有点空虚,内容就只包括隐藏键盘和键盘高度两部分

隐藏键盘其实就在我学习iOS开发的第一个程序里面已经实践过了,不过当时还懵懵懂懂,现在就了解了是什么一回事,就记录一下,也额外加点内容上去。

说这个键盘的出现和隐藏是和输入框获取和失去焦点有关系,输入框获取了焦点,软键盘就会出现;输入框失去了焦点,软键盘就会消失。这个就和Android的有出入。所以要键盘消失其实很简单的一行代码就可以完成了

[nameTextField resignFirstResponder]; //nameTextFiled就是输入框的名字

但是在哪个地方执行,触发机制就多加一点步骤了。让键盘消失首要的肯定是文本框输入完毕(以按回车键为准)就应该消失,那就要去实现UITextFieldDelegate的- (BOOL)textFieldShouldReturn:(UITextField *)textField 方法,并且把输入框的delegate设置成当前的ViewController。代码如下

@interface HGTabItem2KeyboardViewController : UIViewController<UITextFieldDelegate>

{

}

@end

ViewDidLoad的代码

self.txtTextBox.delegate=self;

添加方法

-(BOOL)textFieldShouldReturn:(UITextField *)textField

{

if(self.txtTextBox==textField)

[textField resignFirstResponder];

return true;

} 

在平时使用软键盘的时候总有一个习惯:不是没次打字都想打完结束的,当打字打到一半然后推出不想打让软键盘消失的时候,就会点击一下屏幕空白的地方,软键盘就消失了。现在已经学习了触控事件的话对这个已经不难了,除了在- (BOOL)textFieldShouldReturn:(UITextField *)textField 方法里面调用resignFirstResponder方法外,还在触控的事件里也调用self.view endEditing就行了,这个触控事件可以使用touchesEnded:withEvent:,也可以使用UITapGestureRecognizer

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{   [self.view endEditing:true]; }

声明代码

@interface HGTabItem2KeyboardViewController : UIViewController<UITextFieldDelegate,UIGestureRecognizerDelegate>
{ } @end

ViewDidLoad中的代码

UITapGestureRecognizer *gestrue=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(singleTap:)];

gestrue.numberOfTouchesRequired=;

[self.view addGestureRecognizer:gestrue];

添加方法

-(void)singleTap:(UITapGestureRecognizer *)gecognizer
{   [self.txtTextBox endEditing:true]; }

处理键盘高度实际上是利用了键盘的全局事件,网上有种说法是在iOS5.0以后,键盘会在不同的输入语言下高度会有所变化,但经我在模拟器上实践后发现这个高度的差别不存在,但是这个键盘高度还是有用的,例如QQ,微信在键盘出现的时候,整个视图会往上移动,移动的距离就是键盘高度,这个就用到了键盘高度了。键盘高度是用到键盘的全局事件

  • UIKeyboardWillShowNotification;
  • UIKeyboardDidShowNotification;
  • UIKeyboardWillHideNotification;
  • UIKeyboardDidHideNotification;

在iOS5.0还增加了两个事件

  • UIKeyboardWillChangeFrameNotification
  • UIKeyboardDidChangeFrameNotification

以上的事件看名字就知道是在什么时候触发,但是ChangeFrame事件的效果不算明显,当因为当键盘高度变化的时候同时触发了show和ChangeFrame两个事件,下面还是把代码粘出来

在ViewDidLoad加入以下方法

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

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

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidChange:) name:UIKeyboardDidChangeFrameNotification object:nil];

再加入以下事件方法

- (void)didReceiveMemoryWarning
{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(BOOL)textFieldShouldReturn:(UITextField *)textField
{ if(self.txtTextBox==textField) [textField resignFirstResponder]; return true; } -(void)keyboardWillChange:(NSNotification *)notif
{ NSLog(@"keyboardWillChange"); } -(void)keyboardDidChange:(NSNotification*)notif
{ } -(void)keyboardWillShow:(NSNotification*)notif
{
//keyboard height will be 216, on iOS version older than 5.0 CGRect boxFrame = self.view.frame; boxFrame.origin.y = -[[[notif userInfo]objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size.height+ self.tabBarController.tabBar.frame.size.height;//50; [UIView animateWithDuration:0.3f animations:^{ self.view.frame = boxFrame; }]; NSLog(@"keyboardWillShow"); } -(void)keyboardWillHide:(NSNotification*)notif
{ CGRect boxFrame = self.view.frame; boxFrame.origin.y =; //216; [UIView animateWithDuration:0.3f animations:^{ self.view.frame = boxFrame; }]; }

在点击的时候,文本框会上移,但是文本框刚好在键盘的顶部,还是在视图的最底部。当键盘隐藏时,文本框刚好下移,最终刚好在屏幕最底端。

iOS学习笔记——键盘处理的更多相关文章

  1. iOS学习笔记——AutoLayout的约束

    iOS学习笔记——AutoLayout约束 之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了Au ...

  2. IOS学习笔记25—HTTP操作之ASIHTTPRequest

    IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...

  3. IOS学习笔记之关键词@dynamic

    IOS学习笔记之关键词@dynamic @dynamic这个关键词,通常是用不到的. 它与@synthesize的区别在于: 使用@synthesize编译器会确实的产生getter和setter方法 ...

  4. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  5. iOS学习笔记10-UIView动画

    上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...

  6. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  7. iOS学习笔记之Category

    iOS学习笔记之Category 写在前面 Category是类别(也称为类目或范畴),使用Category,程序员可以为任何已有的类添加方法.使用类别可以对框架提供的类(无法获取源码,不能直接修改) ...

  8. iOS学习笔记之ARC内存管理

    iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...

  9. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

随机推荐

  1. 【腾讯Bugly干货分享】美团大众点评 Hybrid 化建设

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/rNGD6SotKoO8frmxIU8-xw 本期 T ...

  2. Silverlight及WPF中实现自定义BusyIndicator

    在开发Silverlight或者WPF项目时,当我们调用Web服务来加载一些数据时,由于数据量比较大需要较长的时间,需要用户等待,为了给用户友好的提示和避免用户在加载数据过程中进行重复操作,我们通常使 ...

  3. 使用GDB调试Go语言

    用Go语言已经有一段时间了,总结一下如何用GDB来调试它! ps:网上有很多文章都有描述,但是都不是很全面,这里将那些方法汇总一下 GDB简介  GDB是GNU开源组织发布的⼀一个强⼤大的UNIX下的 ...

  4. 文件上传之Apache commons fileupload使用

    后台servlet代码:         File file1 = null,file2=null;         String description1 = null,description2 = ...

  5. 《Entity Framework 6 Recipes》中文翻译系列 (8) -----第二章 实体数据建模基础之继承关系映射TPT

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-8 Table per Type Inheritance 建模 问题 你有这样一 ...

  6. Nodejs学习笔记(二)--- 事件模块

    目录 简介及资料 事件常用函数及使用 emitter.on(event, listener) emitter.emit(event, [arg1], [arg2], [...]) emitter.on ...

  7. 当前不会命中断点。源代码与原始版本不同 (VS2012)

    遇到“当前不会命中断点.源代码与原始版本不同”的问题. 在网上查的类似: 一般studio会提示将“工具”,“选项”,“调试”,“要求源文件与原始版本完成匹配”去掉勾.但是这个配置去掉治标不治本,错误 ...

  8. Attribute富文本使用方法

    ★★★Attribut富文本★★★ 在UITextView和UILable的使用中很多的时候会用到富文本. UITextView和UILable的区别在于: ★★★★UITextView 当文字大于一 ...

  9. 【JQ+锚标记实现点击页面回到顶部】

    前言:今天想写个页面常用到的[点击回到页面顶部或是首页的功能],生活和职场一样,总会有低谷的时候,这个时候咱也别怂.别怂.别怂,说三遍!那都不是事,工作没了,再找呗,就像我上周五,团队解散那天,我是笑 ...

  10. Security1:Create Login

    Login 用于登陆SQL Server,语法是 -- Syntax for SQL Server CREATE LOGIN login_name { WITH <option_list1> ...