我有一个静态表视图,它由几个部分组成,每个部分都有几行。单元格中的数据相对简单:静态图像(从包中加载)和带有静态字符串的标签。
我需要实现对此表视图的搜索。
无需将静态表视图转换为动态表视图,如何实现搜索?
我知道如何在动态表视图上实现搜索,并且我已经尝试了一些生成数组的东西,这些数据必须检查然后生成搜索结果数组的数据模型。我尝试循环已知数量的节和单元格,但这不起作用,因为并非所有单元格同时存在于内存中。我尝试使用scrollToRow并在滚动时捕捉它们,但这也不起作用。
(如果该数组中有任何内容,我将有一个显示搜索结果的if / else块。)
我希望只有一个可用的数组,我可以使用它生成搜索结果。我想避免将表视图转换为某种静态识别的动态黑客系统(将图像命名为image_ [row] _ [col],因为这将是添加静态单元格或重新排序的噩梦)。 如何生成将成为静态表视图中的单元格的数组?
编辑:
我有一个似乎是一个解决方案,但我觉得这是一个肮脏的程序员。这几乎就像我正在给一个Singleton Factory写一个goto。
self.tableView.isHidden = true
let numSections = self.tableView.numberOfSections
for _ in 0..<numSections {
let newSectionArray = Array<KeyMenuTableViewCell>()
cells.append(newSectionArray)
}
for aSectionIndex in 0..<numSections {
let numRows = self.tableView.numberOfRows(inSection: aSectionIndex)
for aRowIndex in 0..<numRows {
let index = IndexPath(row: aRowIndex, section: aSectionIndex)
self.tableView.scrollToRow(at: index, at: .bottom, animated: false)
let cell = self.tableView.cellForRow(at: index) as! KeyMenuTableViewCell
self.cells[aSectionIndex].insert(cell, at: aRowIndex)
}
}
self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: false)
self.tableView.isHidden = false
答案 0 :(得分:1)
使用静态表视图时,我的表视图控制器中没有数据模型,我可以使用该视图执行搜索过滤。
嗯,这就是问题所在。搜索需要搜索数据。即使您将表保存为静态表,也需要有一个数据模型,以便进行搜索。
在任何情况下都不应该尝试搜索表视图,就好像它是数据一样。表视图是 view ;数据是模型。您正在搜索的内容需要成为模型。
答案 1 :(得分:1)
老实说,你的代码片段是一个黑客攻击,你应该听听你头脑中那个告诉你的小声音。我想能够使用IB编辑表并查看它的外观是很方便的,但是当你需要访问表中的数据时使用静态表是错误的方法。正是你抱怨的原因:故事板中存在静态表单元格的数据,而且单元格通常不会同时存在于内存中。
为了搜索表格,您需要访问数据,访问数据的最佳方法是首先自己控制数据模型。没有理由它应该是#34;皇家的痛苦&#34;更改动态表。创建属性列表或其他合适的文件以包含数据。如果您的表包含图像,请使用属性列表中的图像名称。仅编辑表应该只需要更新数据文件。