几种处理iOS中关闭键盘的方式
转载请注明出处,不胜感激!
当我们在iOS开发中,会遇到有几类视图会触发虚拟键盘,但是默认情况下我们点击虚拟键盘上的return键盘依然是无法自动关闭的。 其实,在iOS中有许多种方法可以关闭键盘,我将列举如下三种方式来关闭键盘。
- 运用textFieldDelegate委托代理的方式关闭键盘
- 直接通过控件的DidEndOnExit事件关闭键盘
- 通过点击任意UIView视图空白区域关闭键盘
一、用委托代理的方式关闭键盘
我们有一个textField控件,这里我们把该控件Outlet关联的对象名设定为textField1,接着我们看看如何用委托代理的方式关闭键盘,首先需要在UIViewController后面UItextFieldDelegate,让ViewController类能够识别该协议就能处理相关textField的代理方法了。
class ViewController: UIViewController,UITextFieldDelegate
然后我们在viewDidLoad()方法里将ViewController作为textField1的委托。
override func viewDidLoad() {
super.viewDidLoad()
textField1.delegate = self
}
最后,我们使用textFieldShouldResturn方法,并执行resignFirstResponder方法来注销第一相应,这样就可以关闭键盘了。
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField1.resignFirstResponder()
return true
}
动态效果如下:
二、通过点击控件事件关闭键盘
我们新添加一个textField控件,这里我们把该控件Outlet关联的对象名设定为textField2,接着在ViewController类文件里我们以DidEndOnExit事件来创建一个Action方法,名为HideTextField2。在该方法里我们就可以直接把获得的对象以resignFirstResponder()的方式来关闭键盘了。
@IBAction func HideTextField2(sender: AnyObject) {
sender.resignFirstResponder()
}
动态效果如下:
三、通过点击UIView区域关闭键盘
换一种思路,因为手机的屏幕并不是那么大,用户完全可以更方便的在点击空白区域来关闭键盘,那么既然这样我们直接可以在UIView上做处理。但是你会发现默认情况下UIView并没有支持什么有用的事件,要知道对于处理UITextField处理,UITextField继承自UIControl,而UIControl继承自UIView,UIView又继承自UIResponder,UIRespoder又继承自NSObject,所以我们直接将UIView这一层的自定义类设定为UIControl就行了。
接着我们在Connections Inspector中找到Touch Down事件,并以此事件建立一个Action方法名为hideKeyboard,接着依然用resignFirstResponder()方法对指定的输入控件进行关闭键盘处理,编写代码如下:
@IBAction func hideKeyboard(sender: AnyObject) {
textField1.resignFirstResponder()
textField2.resignFirstResponder()
}
动态效果如下:
好了如上三种方法都能实现关闭键盘的处理,在这里整个ViewController类文件的代码大致如下
//
// ViewController.swift
// hideKeyboardSample
//
// Created by AndersWang on 15/8/17.
// Copyright (c) 2015年 AndersWang. All rights reserved.
//
import UIKit
class ViewController: UIViewController,UITextFieldDelegate {
@IBOutlet var textField1: UITextField!
@IBOutlet var textField2: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
//方法1
textField1.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//方法1
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField1.resignFirstResponder()
return true
}
//方法2
@IBAction func HideTextField2(sender: AnyObject) {
sender.resignFirstResponder()
}
//方法3
@IBAction func hideKeyboard(sender: AnyObject) {
textField1.resignFirstResponder()
textField2.resignFirstResponder()
}
}