IOS中键盘自动隐藏

前言

很多时候当我们在一个文本框中输入信息后,按了确认或者返回键需要隐藏键盘,或者在其他空白区域点击屏幕后也需要隐藏屏幕。

这时肯定就需要让相应的控件响应Tap事件(点击事件),这样我们才能处理。

实现隐藏的两种方法

在IOS中有一个概念叫First Responder,意指第一响应者,也就是当前屏幕上,处于焦点状态的控件,它是第一响应者,我们在界面的触摸的各种手势都是由这个控件接收的。那么很好理解,当用户点击一个输入框之后,弹出输入键盘,此时这个文本输入框便是第一响应者,那现在要隐藏键盘,其实就是不让这个文本输入框作为第一响应者。

文本输入框为我们提供了这么一个方法:resignFirstResponser

UITextField.resignFirstResponder()

这样就取消了这个文本输入框的第一响应者身份了,键盘也就自动隐藏了。

当有很多输入框时,我们还可以使用UIView提供一个就更快的方法:endEditing

UIView.endEditing(true)

直接把整个UIView的编辑状态取消掉,那不管界面上哪个输入框作为第一响应者身份,都能被取消编辑状态,键盘也就消失了。

如何触发

知道了如何让键盘隐藏,那就要在恰当时机去执行它。通常有两种方法:

1)键盘右下角的return、完成按钮被点下时

2)输入框周围的空白区域被点击时

第一种方法,需要处理输入框的DidEndOnExit事件:

@IBAction func txt_DidEndOnExit(sender: UITextField) {
    sender.resignFirstResponder()
}

可以把n个输入框的DidEndOnExit事件都关联到这个事件方法上,这样就不用一个个写重复代码了。

第二种方法,当点击空白区域时,键盘自动隐藏,一般这个空白区域就是一个UIView,我们需要让UIView响应点击(tap)事件,但是要知道响应事件是UIControl的事情,所以,我们需要把这个UIView改成UIControl,因为UIControl是UIView的子类,所以完全可行!

把View的Class改成UIControl,那么这个View就能像UIControl那些控件一样,可以接收点击事件了。

我们处理这个大Control的Touch Down事件:

@IBAction func touchDown(sender: UIControl) {
    txtName.resignFirstResponder()
}

注意,这时就不是用sender对象了,sender是UIControl的,我们是要让输入框取消第一响应者状态。

这里仅争对使用普通UIView的界面,当使用UTableViewController时,就不能用这种方法咯,需要手动创建一个手势识别器,将它关联到整个UITableViewController

使用UITableViewControl这种控件时如何触发

要知道,手势识别器可以很灵活的关联到任意一个View上,所以我们可以为UITableViewController创建一个UITapGestureRecognizer的点击识别器。

在ViewDidLoad方法中写入:

override func viewDidLoad() {
    super.viewDidLoad()
    var tap = UITapGestureRecognizer(target: self, action: "keyboardHide:")
    tap.cancelsTouchesInView = false
    self.view.addGestureRecognizer(tap)
}

func keyboardHide(tapG:UITapGestureRecognizer){
    //整个view  结束编辑状态(方法一)
    self.view.endEditing(true)
    //单个输入框(方法二)
    self.txtUserName.resignFirstResponder()
}

这样整个
UITableViewController的空白区域都能接收tap事件了,也就实现了隐藏输入框的功能。

tips:

本文由wp2blog导入,原文链接:http://devonios.com/ios-hide-keykeyboard.html

时间: 2024-10-05 14:01:36

IOS中键盘自动隐藏的相关文章

oc,UITextFiled,怎么实现点击屏幕键盘自动隐藏和输入密码加密功能

ViewController.m #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; oc,UITextFiled,怎么实现点击屏幕键盘自动隐藏和输入密码加密功能oc,UITextFiled,怎么实现点击屏幕键盘自动隐藏和输入密码加密功能 UITextField * tf

IOS中键盘隐藏几种方式

在ios开发中,经常需要输入信息.输入信息有两种方式: UITextField和UITextView.信息输入完成后,需要隐藏键盘,下面为大家介绍几种隐藏键盘的方式. <一> 点击键盘上的return按钮,隐藏键盘 1.UITextField 遵守协议 设置代理 使用代理中方法 2.UITextView 遵守协议 设置代理 使用代理中方法 <二> 在键盘上添加一个按钮,点击按钮隐藏键盘 设置按钮 1.UITextField  2.UITextView 添加隐藏键盘方法 <三&

Jquery UI - DatePicker 在Dialog中无法自动隐藏的解决思路

通过Jquery UI Dialog模态展示如下的一个员工编辑页面,但是遇到一个奇怪的问题:点击Start Date的input元素后,其无法失去焦点.从而导致DatePicker控件在选择日期后无法自动隐藏. 解决思路:给DatePicker加上onSelect事件,在该事件中让Start Date的input元素的父元素获取焦点,这样DatePicker控件在选择日期后就自动隐藏.

iOS 为键盘添加隐藏按钮

// 为键盘添加隐藏按钮 UIToolbar * backView = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 30)]; [backView setBarStyle:UIBarStyleDefault]; UIBarButtonItem * btnSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSp

iOS中scrollview自动滚动的实现

http://bbs.csdn.net/topics/390347330 原问题是,我要展现给用户的内容放在scrollview中,让内容从上到底自动滚动,我最开始用的是DDAutoscrollview,但是无法实现. 一种解决方案见下边,更多解决方案见:http://ask.csdn.net/questions/374 .h文件 Objective C code ? 1 2 3 4 5 6 7 8 9  @interface Interface1 : UIViewController {   

ios 中键盘被遮挡解决方案

1.当view是非可以滚动的view时, // 添加对键盘的通知 - -(void)viewDidLoad{ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:sel

ios中的自动释放池

自动释放池中是否有虑重功能 1 @autoreleasepool { 2 UIView *view = [UIView alloc] init] autorelease]; 3 [view autorelease]; 4 } 这样写在自动释放池的队列中是两个对象还是一个对象,就是说把view加到自动释放池的队列时,队列本身是否对内容进行了虑重 防止对象的重复添加,比较view里面在队列中了,再次调用autorelease时还有没有作用. 于是写了一个测试代码 1 - (BOOL)applicat

页面跳转 和虚拟键盘的自动隐藏

前提:起码要有两个视图控制器. 注意事项: 设置跳转的动画效果 UITextField输入时,虚拟键盘的位置设置(整体布局向上移动,虚拟键盘的自动隐藏) 实现的功能: A:在第一个页面跳转到第二个页面,然后第二个页面点击按钮,进行返回 B:在第一个页面有一个text控件,点击一个按钮,传递到第二个页面,然后显示到第二个 页面的label上面: 效果展示: 步骤: 1.新建两个类,然后勾选xib,在AppDelegate的实现文件把其中的一个视图加载进去 //新建一个视图控制器 MainViewC

iOS给键盘添加控制栏

iOS中键盘的使用很频繁,有时给键盘上添加一个控制栏可以方便快捷的在不同输入框内进行切换或隐藏 这里简单说下具体实现方式 初始化一个UIToolBar并添加到界面,随着键盘的高度的更改而动态更改,从而进行展示 下面来看代码实现 头文件部分 #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface UIKeyboardTool : NSObject ///用于界面展示的toolbar @property