Anders Wang


我所认识的每个人都是榜样,都有值得我去尊敬和学习的地方。


几种处理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()
    }
}
最近的文章

在Ubuntu上搭建Ghost的过程

转载请注明出处,不胜感激! 在第一篇博文诞生之后,我说过我之后会发布一篇文章作为学习记录下在Ubuntu上搭建Ghost的教程,由于最近很忙的关系迟迟没有写,本着学习在于一点一滴积累。 所以,今…

五花八门, 技术博文详细阅读
更早的文章

运用Storyboard在不同页面之间跳转及传值

转载请注明出处,不胜感激! 在iOS开发中,我们常常会遇到一种应用场景就是需要在页面之间跳转以及传值。 其实,在Storyboard中可以用两种方式进行页面的跳转,第一种是通过建立Segue的方…

iOS, 技术博文详细阅读
comments powered by Disqus