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 搜索结果滚动不会在键盘上方移动到最后一行