当使用 swift 中的搜索栏在 tableview 上选择一行时,它不会执行所需的功能

Posted

技术标签:

【中文标题】当使用 swift 中的搜索栏在 tableview 上选择一行时,它不会执行所需的功能【英文标题】:When selecting a row on a tableview using the search bar in swift it doesn't do the desired function 【发布时间】:2017-11-28 01:39:36 【问题描述】:

我制作了一个表格视图,允许用户使用搜索栏进行搜索。在没有搜索的情况下选择一行时,一切正常。但是,当使用搜索栏时,它不会执行所需的功能。例如。假设我有一个数组 ["dog","cat","horse"],我搜索 "c",cat 会出现,但是如果我按下它,就会出现你按下 "dog" 时出现的功能。我想是因为猫的行是2,但是当我搜索时它变成了1,这是“狗”的行。

谢谢

【问题讨论】:

【参考方案1】:

我通过使用修复它 let indexPath = tableView.indexPathForSelectedRow let currentCell = tableView.cellForRow(at: indexPath!)! print(currentCell.textLabel!.text)找到行的实际标题,而不仅仅是它的值。无论如何感谢您的帮助。

【讨论】:

【参考方案2】:

你好 @user8802333 你需要像 isSearch 这样的 Bool 变量。如果执行了搜索,那么它应该为真,否则为假。在didSelectRowAtIndexPath 中放置一个 if 条件,如果 isSearch 为真,则从搜索结果数组传递值,否则从默认数组传递值。我希望我能清楚地告诉你我想说什么。

【讨论】:

【参考方案3】:

您可能需要保存表格视图中所有单元格的索引路径,可能保存在一个数组中。这样,当重新排列表格时,您仍然可以使用真正的索引路径调用didSelectRowAtIndexPath或其他相关方法。

编辑:您可以为您的 tableView 实现 cellForRowAt 方法:

var indexPathsArray: [Int] = []
...

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    indexPathsArray.append(indexPath.row)

【讨论】:

如何保存tableView中行的indexPath? 你会怎么做?

以上是关于当使用 swift 中的搜索栏在 tableview 上选择一行时,它不会执行所需的功能的主要内容,如果未能解决你的问题,请参考以下文章

搜索栏在 swift 3 中不起作用。无法将类型 (_) -> Bool 的值转换为预期的参数类型 NSPredicate

搜索栏在 iOS 中无法正常工作 [关闭]

搜索栏在活动时移动

搜索栏在点击时隐藏

搜索栏在 Django 网站上不起作用

在 iOS 11 上,导航项中的搜索栏在导航弹出时折叠并卡在状态栏下