LoginSignup
17
8

More than 3 years have passed since last update.

[Swift]UISearchBarの使い方

Last updated at Posted at 2020-10-12

今回の題

SearchBarに入力された値の取り方をアウトプットします。
delegateの理解なども含めた内容です。

間違いや誤った解釈がありましたら、優しくコメントにてお教えいただけると助かります!!🙇‍♀️

コード

storyboardにUISearchBarを配置し、ViewControllerと繋げた以下の状態から始めます。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var searchField: UISearchBar!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
}

1 ViewControllerにUISearchBarDelegateプロコトルを適用させる

class ViewController: UIViewController, UISearchBarDelegate {

余談ですが、初めてこの部分を見たとき、

あれ、プロトコルを適用させたらそのプロトコルに定義されているメソッドや、プロパティを全部このクラスで定義しないとエラーになるんじゃ……。

と思ったのですが、どうやらオプショナルメソッドなるものがあり、そういったメソッドの実装に関してはoptinal(任意)なそうです。

2 delegataプロパティに、このクラス自体を代入する

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        searchField.delegate = self // 追記
    }

こうすることで、SearchBarで起きたイベントをこのクラスで受け取り、処理できるようになります。

また、UISearchBarクラスのdelegataプロパティには、UISearchBarDelegateプロトコルを適用したクラスでなければ代入できません。
スクリーンショット 2020-10-12 17.58.03.png
1でこのクラスにUISearchBarDelegateプロトコルを適用させたのはこの為です。

3 入力値を受け取る

入力後に検索が押されたら処理を実行させたいので、以下のメソッドを使います。
スクリーンショット 2020-10-12 22.29.31.png
メソッド名わかりやすーーー。

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        // キーボードを閉じる
        view.endEditing(true)
        // 入力された値がnilでなければif文のブロック内の処理を実行
        if let word = searchBar.text {
            // デバッグエリアに出力
            print(word)
        }
    }

searchBarSearchButtonClickedメソッドの引数searchBarはUISearchBarクラスのインスタンスで、textプロパティに入力値を保持しています
textプロパティはオプショナル型なので入力値の存在確認(Unwrap)をif let文で行なってから処理を行うようにしています。

これで完成です。

全体図


import UIKit

class ViewController: UIViewController, UISearchBarDelegate {

    @IBOutlet weak var searchField: UISearchBar!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        searchField.delegate = self
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        view.endEditing(true)
        if let word = searchBar.text {
            print(word)
        }
    }
}

一言

楽しみながらswift学習中です。

基本的な構文はこちら(随時更新)にまとめています。

17
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
8