加载UISearchController时自动显示键盘

Roo*_*Pro 8 ios swift uisearchcontroller

我在表视图控制器中创建了一个UISearchController.我使用来自另一个视图控制器的push segue来查看此表视图控制器.我希望一旦按下表视图控制器,键盘就会在搜索栏中显示光标.

我在viewDidLoad方法中使用了搜索控制器

self.mySearchController.active = true
Run Code Online (Sandbox Code Playgroud)

它确实使搜索控制器处于活动状态,但这不会调出键盘,光标也不会放在搜索栏中.我也试过了

self.mySearchController.searchBar.becomeFirstResponder()
Run Code Online (Sandbox Code Playgroud)

这条线似乎没有任何效果.

如何自动/以编程方式调出键盘?下面是我的代码的更详细版本

class PickAddressViewController: UITableViewController, UISearchResultsUpdating {

var searchText = ""

var mySearchController = UISearchController()

override func viewDidLoad() {
    super.viewDidLoad()

    self.mySearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()
        controller.searchBar.text = self.searchText

        self.tableView.tableHeaderView = controller.searchBar

        return controller
    })()

    self.mySearchController.active = true
    self.mySearchController.searchBar.becomeFirstResponder()
}
Run Code Online (Sandbox Code Playgroud)

Nik*_*nov 6

成为BeginResponder的方法,但是您不应该在viewDidLoad中这样做。查看以下讨论以了解详细信息- 无法将searchBar设置为firstResponder

  • 大!我尝试了该链接中的解决方案,并且有效!对于像我这样的其他任何新手,除了我在上面的问题中编写的代码外,还必须执行以下操作:将视图控制器设置为UISearchControllerDelegate。在定义搜索控制器时,写一行内容,表示controller.delegate = self。将beginFirstResponder行放在名为'didPresentSearchController'的委托函数中 (4认同)

Tun*_*Fam 6

雨燕5

  1. viewDidLoad
searchViewController.delegate = self
Run Code Online (Sandbox Code Playgroud)
  1. viewDidAppear
searchViewController.isActive = true
Run Code Online (Sandbox Code Playgroud)

这会激活 SearchController

  1. 定义一个委托方法:
extension MyViewController: UISearchControllerDelegate {
    func didPresentSearchController(_ searchController: UISearchController) {
        DispatchQueue.main.async {
            searchController.searchBar.becomeFirstResponder()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)