如何在 TableView 搜索/过滤中获取项目的前一个 indexPath
How to get the previous indexPath of an item in TableView Search / Filtering
标题可能看起来有点含糊或令人困惑,因为我不知道如何用一行来解释我的问题。
我有一个 tableview
,有大约 500 个单元格,其中的详细信息用 API
填充。 tableview
根据名称有 search / filter function
。
例如,"ABCD" 在单元格 456 上,如果我搜索 ABCD,表格视图将刷新并将 ABCD 放在单元格 0 上。
let searchtextupper = searchText.uppercased()
searchActive = true
filterdata = self.name.filter { [=10=].contains("\(searchtextupper)")
Table.reloadData()
}
这部分都是正确的,但我想在 tableview
重新加载之前获取 ABCD 的 indexPath。我想知道 "ABCD" 在 tableview
重新加载并将 "ABCD" 单元格放在单元格 0 之前位于单元格 456 上。
如何获得 indexPath
?
回答,以防别人需要:
通过使用 @Abhisheks 回答。
我在 class 上声明了一个简单的 int 数组
var arrayofindices = [Int]()
然后在search/filter函数中添加
let indexArray = name.indices.filter { name[[=11=]].localizedCaseInsensitiveContains(searchtextupper) }
arrayofindices = indexArray
和 didSelectRowAt
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var newindex = arrayofindices[indexPath.row]
searchmember.email = self.email[newindex]
}
这里searchmember
是一个struct
,email
是里面的一个variable
。 self.email
是本地声明的 array
,用于存储从 API 收到的电子邮件 ID,具有过滤前的完整电子邮件列表。
您可以使用此代码获取过滤器位置的索引。但首先我认为你的名字数组可能包含相同的名字,所以在那种情况下你需要那个名字的所有索引,对吗?
为此使用此代码 -
let indexArray = name.indices.filter { name[[=10=]].localizedCaseInsensitiveContains(searchtextupper) }
在 indexArray 中,您将获得该名称的所有索引。
如果你确定你的名字数组不会包含重复的名字,那么 -
let index = name.firstIndex{[=11=] === searchtextupper}
希望这对您有所帮助。快乐编码
标题可能看起来有点含糊或令人困惑,因为我不知道如何用一行来解释我的问题。
我有一个 tableview
,有大约 500 个单元格,其中的详细信息用 API
填充。 tableview
根据名称有 search / filter function
。
例如,"ABCD" 在单元格 456 上,如果我搜索 ABCD,表格视图将刷新并将 ABCD 放在单元格 0 上。
let searchtextupper = searchText.uppercased()
searchActive = true
filterdata = self.name.filter { [=10=].contains("\(searchtextupper)")
Table.reloadData()
}
这部分都是正确的,但我想在 tableview
重新加载之前获取 ABCD 的 indexPath。我想知道 "ABCD" 在 tableview
重新加载并将 "ABCD" 单元格放在单元格 0 之前位于单元格 456 上。
如何获得 indexPath
?
回答,以防别人需要:
通过使用 @Abhisheks 回答。
我在 class 上声明了一个简单的 int 数组
var arrayofindices = [Int]()
然后在search/filter函数中添加
let indexArray = name.indices.filter { name[[=11=]].localizedCaseInsensitiveContains(searchtextupper) }
arrayofindices = indexArray
和 didSelectRowAt
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var newindex = arrayofindices[indexPath.row]
searchmember.email = self.email[newindex]
}
这里searchmember
是一个struct
,email
是里面的一个variable
。 self.email
是本地声明的 array
,用于存储从 API 收到的电子邮件 ID,具有过滤前的完整电子邮件列表。
您可以使用此代码获取过滤器位置的索引。但首先我认为你的名字数组可能包含相同的名字,所以在那种情况下你需要那个名字的所有索引,对吗? 为此使用此代码 -
let indexArray = name.indices.filter { name[[=10=]].localizedCaseInsensitiveContains(searchtextupper) }
在 indexArray 中,您将获得该名称的所有索引。
如果你确定你的名字数组不会包含重复的名字,那么 -
let index = name.firstIndex{[=11=] === searchtextupper}
希望这对您有所帮助。快乐编码