首页 > 解决方案 > Swift iOS - 如何让键盘在出现 SearchController 的同时出现?

问题描述

只是为了上下文,我的键盘成功出现,所以这不是问题。

我有一个 searchButton 作为我的 rightBarButtonItem,当按下它时,它会模态地呈现一个包含 SearchController 的 vc。当 SearchController 出现时,键盘也出现了,但键盘出现的时间晚了一秒,在它出现之前有 1 秒的延迟。基本上 vc 出现在场景中,然后出现键盘,我无法在出现 SearchController 的同时出现键盘。我在 YouTube 和 Vimeo 的 iOS 应用上,当我按下他们的搜索按钮时,键盘会同时显示 SearchController,没有 1 秒的延迟。

如何让键盘在 SearchController 呈现自身的同时呈现自身?

按钮以模态方式呈现 SearchController:

@objc func searchButtonTapped() {
    let searchVC = SearchController()
    let nav = UINavigationController(rootViewController: searchVC)
    present(nav, animated: true, completion: nil) 
}

SearchController:我已经尝试 在in和r中添加searchController.isActive = true和,但没有任何区别searchController.searchBar.becomeFirstResponder()DispatcQeue.mainviewWillAppearviewDidAppea

class SearchController: UIViewController {

var searchController: UISearchController!

override func viewDidLoad() {
    super.viewDidLoad()

    searchController = UISearchController(searchResultsController: nil)
    searchController.delegate = self
    searchController.searchBar.delegate = self
    searchController.searchResultsUpdater = self
    searchController.searchBar.showsCancelButton = true
    searchController.searchBar.placeholder = "Search"
    searchController.searchBar.returnKeyType = .search
    searchController.dimsBackgroundDuringPresentation = false
    searchController.hidesNavigationBarDuringPresentation = false
    searchController.searchBar.sizeToFit()
    searchController.searchBar.tintColor = UIColor.black

    definesPresentationContext = true
    navigationItem.hidesBackButton = true
    navigationItem.titleView = searchController.searchBar
}

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

    searchController.isActive = true
}

// I tried both of these searchContrller delegate methods SEPERATELY but it made no difference, there's still a 1 second delay
func presentSearchController(_ searchController: UISearchController) {
    DispatchQueue.main.async {
        self.searchController.searchBar.becomeFirstResponder()
    }
}

func didPresentSearchController(_ searchController: UISearchController) {
    DispatchQueue.main.async {
        self.searchController.searchBar.becomeFirstResponder()
    }
}

}

标签: iosswiftuisearchcontrolleruikeyboard

解决方案


当然有延迟..这个动画完成了,然后键盘出现了。

 present(nav, animated: true, completion: nil) 

推荐阅读