Help us understand the problem. What is going on with this article?

【Swift】TextFieldのキーボードを閉じる方法3選

More than 1 year has passed since last update.

TextFieldのキーボードを閉じる方法をまとめてみました。

032d4bb4a0add2be1948bec3e048227f.gif

1. 「return」キーを押す

コードベース

resignFirstResponder()メソッドを利用します。

ViewController.swift
import UIKit

class ViewController: UIViewController, UITextFieldDelegate{

    @IBOutlet weak var inputText: UITextField!
    @IBOutlet weak var outputText: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        inputText.delegate = self
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        // キーボードを閉じる
        textField.resignFirstResponder()
        outputText.text = textField.text
        return true
    }
}

storyboardベース

Xcodeのイベントアクションを利用します。

スクリーンショット 2017-06-26 22.56.36.png

①TextFieldの上で右クリック(二本指でタップ)
②「Sent Events」の「Did End On Exit」を「control」キーを押しながらドラッグ
③「Name」をつけて「Connect」

スクリーンショット 2017-06-26 22.59.41.png

コードが追加されたことを確認できます。

ViewController.swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var outputText: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func inputText(_ sender: UITextField) {
        outputText.text = sender.text
    }
}

他にも様々なイベントアクションがあるので覚えておくと簡単に実装できます。
参考記事:ボタンによるイベント処理 – swiftによるiOSアプリ開発

2. ボタンを押す

endEditing()メソッドを利用します。
(resignFirstResponder()メソッドでも実装可能です。)

005c8194729f917d5f8db590273fd42b.gif

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var inputText: UITextField!
    @IBOutlet weak var outputText: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func button(_ sender: Any) {
        outputText.text = inputText.text
        // キーボードを閉じる
        inputText.endEditing(true)
    }
}

3. TextField以外の部分をタッチ

touchesBeganメソッドをオーバーライドします。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var outputText: UILabel!

    @IBOutlet weak var inputText: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        outputText.text = inputText.text
        self.view.endEditing(true)
    }
}

以上をうまく組み合わせることでユーザーにストレスを与えない実装になりそうです。

参考記事

UITextFieldの入力後に入力用キーボードを閉じる方法

gitlab-jp
Git/DevOpsツールチェーンプラットフォーム「GitLab」についての日本コミュニティ。
https://gitlab-jp.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away