ios - 即使我设置了它的委托、数据源并注册了可重用单元格,UITableView 也没有被调用
问题描述
所以我有一个UITableView
(不是 tableView 控制器),我已经设置了它的delegate
, dataSource
,甚至注册了它的可重用单元格,在我的viewDidLoad
:
searchTableView.delegate = self
searchTableView.dataSource = self
searchTableView.isHidden = true
searchTableView.isUserInteractionEnabled = false
searchTableView.register(UITableViewCell.self, forCellReuseIdentifier: "SearchResultCell")
不用担心isUserInteractionEnabled
,我将其更改true
为用户应该能够使用它的时间。无论如何,我 100% 确定原型单元在情节提要中具有正确的重用标识符以及我的cellForRowAt
功能。以下是表格视图dataSource
功能:
//MARK: - UITableViewDelegate & UITableViewDataSource Methods
extension MapViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
searchCompleter.queryFragment = searchBar.searchTextField.text!
let completionResults = searchCompleter.results
print("Yo")
return completionResults.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
searchCompleter.queryFragment = searchBar.searchTextField.text!
let completionResults = searchCompleter.results
print(completionResults)
print("yo")
let cell = tableView.dequeueReusableCell(withIdentifier: "SearchResultCell", for: indexPath)
cell.textLabel?.text = completionResults[indexPath.row].subtitle
return cell
}
}
然而,当我在模拟器中时,没有任何东西填充 tableView。我认为 tableViewdataSource
函数只是没有被调用,因为我在其中设置了打印语句并且它们没有出现。我也 100% 确定completionResults
(an MKLocalSearchCompleter
) 确实有效,因为我同时在我的 searchBartextDidChange
函数中使用它并打印结果。我不明白为什么它会在那个函数中工作,而不是我的 tableview 函数,除非它必须在 searchBar 函数中。无论如何,以防万一,这是该功能:
//MARK: - UISearchBarDelegate Methods
extension MapViewController: UISearchBarDelegate, MKLocalSearchCompleterDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.count > 0 {
searchTableView.isHidden = false
searchTableView.isUserInteractionEnabled = true
} else {
searchTableView.isHidden = true
searchTableView.isUserInteractionEnabled = false
}
searchCompleter.queryFragment = searchBar.searchTextField.text!
let completionResults = searchCompleter.results
print(completionResults)
}
}
有谁知道为什么我searchTableView
不会调用这些dataSource
函数?甚至有人建议它在某一时刻是约束,我已经确保这些是正确的,所以这也不是问题。谢谢你的帮助!
解决方案
你似乎没有打电话searchTableView.reloadData()
。除非您调用该方法,否则它不会重新加载表。
通常,您会为MKLocalSearchCompleter
and 调用设置一个委托reloadData
。completerDidUpdateResults(_:)
推荐阅读
- go - 每次在golang中运行测试时如何获得不同的UUID?
- snowflake-cloud-data-platform - 如何解决 Snowflake 中仅针对任务运行显示的 Stream Not Found 错误?
- javascript - 如何知道是否需要将应用程序包装在 Provider 中?暴民 6
- html - Kendo React Richtext Editor - 在富文本中添加 HTML 代码
- list - 从 AWS::SSM::Document 中的参数 [StringList] 检索值
- spring - 如何知道在 Spring Boot 中的 application.properties 中使用哪个配置
- excel - 单击 Excel 中的超链接会在运行宏之前清除范围选择
- python - 如何使用 python 使 SQL 文件可读?
- visual-studio - .deps.json 在 vs build in dev ops 之后找不到执行 vs 测试
- php - 获取laravel中复制记录的自动增量id