如何在 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是一个structemail是里面的一个variableself.email 是本地声明的 array,用于存储从 API 收到的电子邮件 ID,具有过滤前的完整电子邮件列表。

您可以使用此代码获取过滤器位置的索引。但首先我认为你的名字数组可能包含相同的名字,所以在那种情况下你需要那个名字的所有索引,对吗? 为此使用此代码 -

let indexArray = name.indices.filter { name[[=10=]].localizedCaseInsensitiveContains(searchtextupper) }

在 indexArray 中,您将获得该名称的所有索引。

如果你确定你的名字数组不会包含重复的名字,那么 -

let index = name.firstIndex{[=11=] === searchtextupper}

希望这对您有所帮助。快乐编码