今回の題
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プロトコルを適用したクラスでなければ代入できません。
1でこのクラスにUISearchBarDelegateプロトコルを適用させたのはこの為です。
3 入力値を受け取る
入力後に検索
が押されたら処理を実行させたいので、以下のメソッドを使います。
メソッド名わかりやすーーー。
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学習中です。
基本的な構文はこちら(随時更新)にまとめています。