如果我有一个过滤搜索结果的 UITableView,如何将 ViewDidLoad() 上的 IndexPath 设置为常量,即使在搜索时也是如此
Posted
技术标签:
【中文标题】如果我有一个过滤搜索结果的 UITableView,如何将 ViewDidLoad() 上的 IndexPath 设置为常量,即使在搜索时也是如此【英文标题】:if I have a UITableView that filters results on a search, how do I set the IndexPath on ViewDidLoad() to be constant even when searched 【发布时间】:2019-05-05 01:46:49 【问题描述】:我正在尝试设置一个可搜索的UITableView
。现在,当视图加载时,有 23 个单元格,因此 indexPath
从 0 变为 22,如果您单击第三个单元格,它将返回 2 的 indexPath
。但是当我搜索某些内容并单击第三个结果时,它仍然返回 2 的 indexPath
。但是,我希望搜索的 indexPath
是它最初加载的内容。
【问题讨论】:
为什么搜索时需要相同的索引路径?您仍然可以访问搜索数组中的数据。 当我点击某个单元格时,我想将屏幕发送到另一个secondViewController
。在发送它之前,虽然我设置了一个结构变量searchStruct.buttonTag = indexPath
。然后,在这个secondViewController
上,我调用searchStruct.buttonTag
以确定secondViewController
上显示的内容。还有另一种方法可以将searchStruct.buttonTag
的值设置为等于原始索引吗? @rmaddy
你绝对不应该设置另一个视图控制器的按钮标签。只需将数据传递给第二个视图控制器。让那个视图控制器更新它自己的视图。
传递数组元素,而不是数组索引
我想传递数组元素,但我会在UITableView
的didSelectItem()
函数中执行此操作。我想这样做:passingData = theArray[indexPath.row]
;但是,如果不在上面提供的函数中过滤theArray
,我就无法做到这一点。你知道搜索时如何过滤这个数组吗? @Paulw11
【参考方案1】:
我认为您可能希望采取稍微不同的方法。
在您的func tableView(UITableView, cellForRowAt: IndexPath) -> UITableViewCell
实现中,您必须将indexPath
转换为您的23 个数据元素之一。无论您是否按搜索条件进行过滤,这都是正确的。
因此,在您实现func tableView(UITableView, didSelectRowAt: IndexPath)
时,我建议您在此函数中对indexPath
进行完全相同的翻译,以获得正确的数据元素。
由于您正在实现相同的逻辑以使用 IndexPath
来获取数据元素,因此该逻辑可能应该在两个表视图函数可以共享的一个函数中。
添加的代码示例
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let cake = filteredCakes[indexPath.row]
// bake your cell with your cake here
// cell.textLabel.text = cake.description // or whatever
return cell
那么,在处理用户的点击时:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let cake = filteredCakes[indexPath.row]
// do whatever actions you want now that the user has tapped
【讨论】:
感谢您的解决方案,这是有道理的,但我还是有点困惑。你能看到编辑过的问题,并可能给我一个代码应该是什么样子的例子吗?谢谢,非常感谢您的帮助!以上是关于如果我有一个过滤搜索结果的 UITableView,如何将 ViewDidLoad() 上的 IndexPath 设置为常量,即使在搜索时也是如此的主要内容,如果未能解决你的问题,请参考以下文章
NSFetchedResultsController 结果过滤
如何在 Swift 中使用搜索栏过滤具有自定义单元格的 UITableView 的内容?