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

隐藏键盘其实就在我学习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. 公司内部培训AlwaysOn PPT分享

    公司内部培训AlwaysOn PPT分享 下载地址: http://files.cnblogs.com/files/lyhabc/alwayson.ppt

  2. [Xamarin] 使用Webview 來做APP (转帖)

    有時候,企業要求的沒有這麼多,他原本可能官方網站就已經有支援Mobile Web Design 他只需要原封不動的開發一個APP 也或是,他只是要型錄型,或是問卷調查的型的APP,這時候透過類似像if ...

  3. 我的面板我做主 -- 淘宝UWP中自定义Panel的实现

    在Windows10 UWP开发平台上内置的XMAL布局面板包括RelativePanel.StackPanel.Grid.VariableSizedWrapGrid 和 Canvas.在开发淘宝UW ...

  4. 让linux好用起来--操作使用技巧

    让linux好用起来--操作使用技巧 1   概述 在一个初学者眼里,linux的 CLI 界面没有图形界面那样多彩和友好,会让人产生畏难心理,但是作为一个稍微进阶的linux玩家,自然会积累不少经验 ...

  5. 如何在Visual Studio 2012中发布Web应用程序时自动混淆Javascript

    同Java..NET实现的应用程序类似,Javascript编写的应用程序也面临一个同样的问题:源代码的保护.尽管对大多数Javascript应用公开源代码不算是很严重的问题,但是对于某些开发者来说, ...

  6. 启用WebApi 2里的Api描述信息(Help下的Description)

    环境:vs2013+web api 2 问题:默认情况下新建的Web Api 2项目,自带的Help页下会显示Api的相关信息,但Description那一栏无法获取到数据,如下图所示: 解决: 1. ...

  7. Nginx重写

    一.location匹配 1.分类:(1)正则location:~,~*(2)普通location:=,^~,@,无2.匹配规则:(1) =    精确匹配.如果找到,停止搜索(2) ^~    普通 ...

  8. MySQL常用命令和常见问题

    MySQL常用命令和常见问题 --创建数据库并设置字符集 create database wip default character set utf8 collate utf8_general_ci; ...

  9. 基于ReactCSSTransitionGroup实现react-router过渡动画

      此前,我使用了react-router库来完成单页应用的路由,从而实现组件之间的切换能力.然而,默认页面的切换是非常生硬的,为了让页面切换更加缓和与舒适,通常的方案就是过渡动画. 这里我调研了2种 ...

  10. Sql Server系列:数据库组成及系统数据库

    1. 数据库组成 数据库的存储结构分为逻辑存储结构和物理存储结构. ◊ 逻辑存储结构:说明数据库是由哪些性质的信息所组成.SQL Server的数据库不仅仅只是数据的存储,所有与数据处理操作相关的信息 ...