让我的 UISearchBar 在视图加载时自动获得焦点

Bag*_*yer 1 uisearchbar ios swift3

这是我在导航栏中使用 UISearchBar 的视图:

在此处输入图片说明

我希望它在我的视图加载时自动聚焦。我根据这个问题尝试了几种方法。但没有一个工作。我必须单击搜索栏才能使其集中。

在此处输入图片说明

这是我的代码之一:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    self.searchController.isActive = true

    DispatchQueue.main.async { [unowned self] in
        self.searchController.searchBar.becomeFirstResponder()
    }
}
Run Code Online (Sandbox Code Playgroud)

有人提到 searchController 应该在 becomeFirstResponder 之后处于活动状态。我试过这个:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    DispatchQueue.main.async { [unowned self] in
        self.searchController.searchBar.becomeFirstResponder()
        self.searchController.isActive = true
    }
}
Run Code Online (Sandbox Code Playgroud)

这次键盘确实出来了。但是我无法在搜索栏中输入任何内容。

任何的想法?谢谢。

Bag*_*yer 6

我按照建议并重新创建我的项目。然后它起作用了。我的代码:

class SearchViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchResultsUpdating, UISearchControllerDelegate, UISearchBarDelegate {

 ......

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

func didPresentSearchController(_ searchController: UISearchController)    {
    DispatchQueue.main.async { [unowned self] in
        self.searchController.searchBar.becomeFirstResponder()
    }
}
Run Code Online (Sandbox Code Playgroud)

必须放入becomeFirstRespnder主队列,否则键盘不会自动显示。