Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@star__hoshi

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

画面描画時に 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
7
Help us understand the problem. What are the problem?