UISearchController - 键盘不显示

Posted

技术标签:

【中文标题】UISearchController - 键盘不显示【英文标题】:UISearchController - Keyboard not showing 【发布时间】:2015-05-27 19:36:24 【问题描述】:

我正在使用 UISearchController 并且搜索功能除了两件事外都可以工作。也许它们是相关的: a) 键盘不显示。所以我不能按“搜索”按钮 b)在我的主 TableView 中,我访问了具有“字幕”样式的原型单元格。进行搜索时,显示的单元格为“基本”样式。在这两种情况下(TableViewController 和 SearchViewController)我都使用相同的单元格标识符。

有什么想法吗?下面是部分代码:

class OverviewTableViewController: UITableViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        let resultsController = SearchResultsController()
        resultsController.birds = birds
        searchController = UISearchController(searchResultsController: resultsController)
        //searchController.dimsBackgroundDuringPresentation = true

        let searchBar = searchController.searchBar
        searchBar.scopeButtonTitles = ["One", "Two"]
        searchBar.placeholder = "Search"
        searchBar.sizeToFit()
        tableView.tableHeaderView = searchBar
        searchController.searchResultsUpdater = resultsController

第二类:

class SearchResultsController: UITableViewController, UISearchResultsUpdating 

    var items: [Item] = []
    var filtered: [Item] = []

override func viewDidLoad() 
    super.viewDidLoad()
    tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")


// MARK: - UISearchResultsUpdating Conformance

func updateSearchResultsForSearchController(searchController: UISearchController) 
    //searchController.hidesNavigationBarDuringPresentation = true
    let searchString = searchController.searchBar.text
    let buttonIndex = searchController.searchBar.selectedScopeButtonIndex
    filtered.removeAll(keepCapacity: true)

    if !searchString.isEmpty 
        for item in items 
            ...
            
        

    self.tableView.reloadData()

    

【问题讨论】:

对于您的第一个问题'a)',您是在模拟器还是设备中进行测试?如果在模拟器中,请尝试点击 ⌘K(command-k)。 另外,您能否向我们展示一些相关代码,以便我们为您提供更多帮助?也许两个控制器的一些委托/数据源方法? benhameen - 感谢我能够使用快捷键获得键盘。 ...但第二个问题仍然存在 能贴出cellForRowAtIndexPath的代码吗? 【参考方案1】:

我有同样的问题,基本上如果你的父类有一个 UISearchController 以及你的子类并且你正在设置

self.definesPresentationController = YES

在您的父类中,您的子类的搜索控制器不会显示键盘。我花了一段时间才弄清楚,但这就是正在发生的事情。

解决方法是在你的父类即将推送子类时设置self.definesPresentationController = NO,在你父类的viewWillAppear中设置self.definesPresentationController = YES...

希望这也能帮助其他人。

【讨论】:

这确实有帮助。谢谢!【参考方案2】:

在我的主 TableView 中,我访问了样式为“Subtitle”的原型单元格。进行搜索时,显示的单元格为“基本”样式

确保SearchResultsController 中的单元格也是“字幕”样式。

【讨论】:

【参考方案3】:

除了按照其他用户的建议做之外,我还做了以下事情,并且成功了:

searchController.definesPresentationContext = true

【讨论】:

以上是关于UISearchController - 键盘不显示的主要内容,如果未能解决你的问题,请参考以下文章

使用 UISearchController 显示搜索结果和键盘覆盖 UITableView 中的底部行/部分

tvOS UISearchController - 滚动时如何避免自动搜索栏和键盘隐藏行为?

Swift UISearchController tableview 搜索结果滚动不会在键盘上方移动到最后一行

tvOS 14.3 UISearchController:如何锁定显示

使 UISearchController 搜索栏自动激活

如何从 searchResultsController (UISearchController) 更新数据