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

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

More than 3 years have passed since last update.

画面描画時に 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

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした