当使用 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