Swift

Swift:UITextFieldの使い方・・・Delegate(デリゲート)云々


今回はUITextFieldについて色々やってみようと思います。

UITextFieldについて

UITextFieldを使うと、
文字を入力することができます。
例を挙げると、

・名前を入力する欄(フォーム)

・住所を入力する欄(フォーム)

・検索するためにテキストを入力する欄(フォーム) ・・・etc

つまり、アプリにはほとんど必須と言っても良いほどのUIなのです。超大事なのです。

TextFieldを使ってシンプルなアプリを作成しましょう

f:id:jumprails3303:20161122211242p:plain

今回はこんな感じのアプリを作ります!!

まずは新しいプロジェクトを立ち上げ、

StoryBoardを開いてください。

そしてこんな具合で、
UIを配置してください。
f:id:jumprails3303:20161122212357p:plain

次に、コードと結びつけましょう。
名前はそれぞれ、

UILabel:label (outlet)

UIButton:changeButton (action)

UITextField:textField (outlet)

にしましょう。

import UIKit

class ViewController: UIViewController{

    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var textField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func changeButton(_ sender: Any) {
        
    }
    

}

こうなっていれば完璧です!!

そして最後に

@IBAction func changeButton(_ sender: Any) {
        label.text = textField.text
    }

としましょう。
label.text = textField.text

の意味は
labelのtextに、現在表示させてるtextFieldのtextを代入しよう!
という意味です。

ひとまず完成です。
RUNして見ましょう。
動きましたか??

Delegate・デリゲートについて

デリゲートとは、
それぞれのUIのできる範囲にないことを
別のUIに任せることです。

自分ではできないことをできる人に任せる
ということです。

今回なぜ、delegateについて解説しているのかといいますと、
『enter(return)キー』を押した時に、キーボードを閉じる処理をしたいからです。
だいたいどんなアプリもenterを押すと、キーボードが閉じますよね!それです!

しかし、textFieldはキーボードを閉じることができません・・・
そこで、ViewControllerに任せるのです!!

今回では、

enterを押す

TextFieldはenterを押されたことを感知する

TextFieldはenterが押されたことをViewControllerに教える。

ViewControllerがキーボードを閉じる

という動きになります。

TextFieldはキーボードを閉じることができないので、
閉じることができるViewControllerにその処理を任せるということです。

では、具体的に書いていきましょう。

import UIKit

class ViewController: UIViewController, UITextFieldDelegate{// UITextFieldDelegateを設定!!!

    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var textField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        textField.delegate = self
        // textFieldのdelegateをself(ViewController)に任せるぜ!!
        
    }

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

    @IBAction func changeButton(_ sender: Any) {
        label.text = textField.text
    }
    
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        // enter(return)を押した時に呼ばれるメソッド
        
        
        label.text = textField.text
        // changeButtonと同じ


  textField.resignFirstResponder()
        // キーボードを閉じるよ!!
        
        return true
    }
    

}

完成!!


ABOUT ME
ささお
3年目iOSエンジニア。 スタートアップで働いておりやす。 プログラミングスクールとエンジニアのキャリアを考えたい。 作ったアプリ - https://apps.apple.com/us/app/loverprofile/id1463563845?l=ja&ls=1