搜索结果不显示 tableView 中的单元格
Search result doesn't show cells in tableView
tableView 不显示包含我的搜索结果的单元格。搜索工作正常,我验证了所有数据,但是当我将 cell.localName?.text 分配给该值时,它始终为零。不知道哪里出了问题。我在 Objective-C 中发现了另一个具有相同问题的 post 并且那里的答案是我需要使用真实 tableView 中的单元格,方法是在单元格出列时添加 self.tableView,但是它没有为我工作。有什么建议吗?
这是我的代码:
class SearchResultsController: UITableViewController, UISearchResultsUpdating {
var localNames: [String] = []
var filteredNames: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
tableView.registerClass(localCell.self, forCellReuseIdentifier: "localCell")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func updateSearchResultsForSearchController(searchController: UISearchController) {
let searchedString = searchController.searchBar.text
filteredNames.removeAll(keepCapacity: true)
if !searchedString.isEmpty {
let filter: String -> Bool = {name in
let range = name.rangeOfString(searchedString, options: NSStringCompareOptions.CaseInsensitiveSearch)
return range != nil
}
let matches = localNames.filter(filter)
filteredNames += matches
}
tableView.reloadData()
}
// MARK: - Table view data source
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete method implementation.
// Return the number of rows in the section.
return filteredNames.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: localCell = self.tableView.dequeueReusableCellWithIdentifier("localCell") as localCell
cell.localName?.text = filteredNames[indexPath.row]
println(cell.localName?.text)
cell.localAddress?.text = "text"
cell.scheduleData?.text = "text"
cell.salaData?.text = "text"
cell.wifiData?.text = "text"
return cell
}
如果您的手机正在返回 nil
然后在您的 dequeueReusableCellWithIdentifier
通话后使用以下内容自行创建一个:
if(cell == nil){
cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "localCell")
}
此外,如果您使用的是 UISearchController,则应使用 2 个不同的数组来填充 UITableView,而不是操作同一个数组。
您可以通过检查搜索控制器在您的 tableView 委托方法中是否处于活动状态并采取相应行动来完成此操作。
好的,所以我找到了解决方案并发帖,以防其他人遇到与我相同的问题。我使用的是故事板中原型单元中的自定义单元。 resultController 创建了一个新的 tableView,它对自定义单元格一无所知,这就是为什么它 returns 总是 nil 的原因。为了修复它,我参考了第一次使用的 tableView 而不是新的,或者从真实的 table 中获取单元格,这样我的自定义单元格就被识别了。
tableView 不显示包含我的搜索结果的单元格。搜索工作正常,我验证了所有数据,但是当我将 cell.localName?.text 分配给该值时,它始终为零。不知道哪里出了问题。我在 Objective-C 中发现了另一个具有相同问题的 post 并且那里的答案是我需要使用真实 tableView 中的单元格,方法是在单元格出列时添加 self.tableView,但是它没有为我工作。有什么建议吗?
这是我的代码:
class SearchResultsController: UITableViewController, UISearchResultsUpdating {
var localNames: [String] = []
var filteredNames: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
tableView.registerClass(localCell.self, forCellReuseIdentifier: "localCell")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func updateSearchResultsForSearchController(searchController: UISearchController) {
let searchedString = searchController.searchBar.text
filteredNames.removeAll(keepCapacity: true)
if !searchedString.isEmpty {
let filter: String -> Bool = {name in
let range = name.rangeOfString(searchedString, options: NSStringCompareOptions.CaseInsensitiveSearch)
return range != nil
}
let matches = localNames.filter(filter)
filteredNames += matches
}
tableView.reloadData()
}
// MARK: - Table view data source
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete method implementation.
// Return the number of rows in the section.
return filteredNames.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: localCell = self.tableView.dequeueReusableCellWithIdentifier("localCell") as localCell
cell.localName?.text = filteredNames[indexPath.row]
println(cell.localName?.text)
cell.localAddress?.text = "text"
cell.scheduleData?.text = "text"
cell.salaData?.text = "text"
cell.wifiData?.text = "text"
return cell
}
如果您的手机正在返回 nil
然后在您的 dequeueReusableCellWithIdentifier
通话后使用以下内容自行创建一个:
if(cell == nil){
cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "localCell")
}
此外,如果您使用的是 UISearchController,则应使用 2 个不同的数组来填充 UITableView,而不是操作同一个数组。
您可以通过检查搜索控制器在您的 tableView 委托方法中是否处于活动状态并采取相应行动来完成此操作。
好的,所以我找到了解决方案并发帖,以防其他人遇到与我相同的问题。我使用的是故事板中原型单元中的自定义单元。 resultController 创建了一个新的 tableView,它对自定义单元格一无所知,这就是为什么它 returns 总是 nil 的原因。为了修复它,我参考了第一次使用的 tableView 而不是新的,或者从真实的 table 中获取单元格,这样我的自定义单元格就被识别了。