LoginSignup
6
7

More than 5 years have passed since last update.

画面描画時に searchBar にフォーカスを当てキーボードを表示する

Posted at

画面描画時に UISearchController の searchBar にフォーカスが当たりキーボードが表示されている状態になってほしい。

viewDidLoad とかで searchController.searchBar.becomeFirstResponder() を呼べばいけるかな〜と思ったけどちょっと頑張らないといけなかったのでメモ。

前提

すでに画面に searchBar が表示されるくらいのコードはできていること。

searchController.isActive = true

viewDidAppearsearchController.isActive = true にする。
Active になると SearchBar のキャンセルボタンが表示される状態になる。

    override func viewDidAppear(_ animated: Bool) {
        searchController.isActive = true
    }

UISearchControllerDelegate

UISearchControllerDelegate にある didPresentSearchController 内で becomeFirstResponder を呼ぶ。

delegate を使うということは、 viewDidLoad などで searchController.delegate = self などしておく必要がある。

extension MyViewController: UISearchControllerDelegate {
    func didPresentSearchController(_ searchController: UISearchController) {
        searchController.searchBar.becomeFirstResponder()
    }
}

これで画面描画時に自動で searchBar にフォーカスが当たり、キーボードが出るはず!
searchController のロードが完了しないと becomeFirstResponder() が利かないらしく、表示を待つ必要があるとのこと。

全体

実際のコードが必要なところを削ぎ落としたので、もしかしたらエラー出て動かないかもです。。
全体としてこんな感じで実装できますという、雰囲気を掴んでいただければ。

import UIKit

class MyViewController: UIViewController {
    @IBOutlet weak var tableView: UITableView!
    var searchController = UISearchController(searchResultsController: nil)

    override func viewDidLoad() {
        super.viewDidLoad()
        searchController.delegate = self
        tableView.tableHeaderView = searchController.searchBar
    }

    override func viewDidAppear(_ animated: Bool) {
        searchController.isActive = true
    }
}

extension MyViewController: UISearchControllerDelegate {
    func didPresentSearchController(_ searchController: UISearchController) {
        searchController.searchBar.becomeFirstResponder()
    }
}

参考

ios - Cannot set searchBar as firstResponder - Stack Overflow

6
7
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
6
7