我有 uitableView 需要搜索它。当我单击一个单元格时,它会在该单元格中显示一个指示符(它是多选表)。到目前为止,每件事都很有效。但是,当我搜索某些内容并返回到原始表时,返回的索引不是原始索引,它表示错误的单元格。我在stackoverflow中看到很多问题,但他们使用故事板,或者他们在 Objective-c 中,我不明白。
如何在搜索表中获取原始indexPath?
在 ContactListView :
extension ContactListView: UITableViewDelegate, UITableViewDataSource {
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if (presenter?.isSelectionMode)! {
self.tableView.allowsMultipleSelection = true
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdContactSelection, for: indexPath) as! ContactListCellSelection
cell.selectionStyle = .none
if searchController.isActive && searchController.searchBar.text != "" {
cell.dataSourceItem = filteredItems[indexPath.row]
} else {
cell.dataSourceItem = presenter?.items?[indexPath.item]
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if (presenter?.isSelectionMode)! {
let cell = tableView.cellForRow(at: indexPath) as? ContactListCellSelection
// configure decides to show indicator or not
configure(cell!, forRowAtIndexPath: indexPath)
}
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searchController.isActive && searchController.searchBar.text != "" {
return filteredItems.count
}
let count = presenter?.items?.count ?? 0
tableView.backgroundView = nil
if count == 0 {
tableView.EmptyMessage(title: NSLocalizedString("no_transaction_contact", comment: ""), message: NSLocalizedString("no_transaction_press_plus_button_contact", comment: ""))
}
return count
}
func filterContentForSearchText(searchText: String) {
filteredItems = (presenter?.items?.filter { item in
return item.displayName.lowercased().contains(searchText.lowercased())
})!
tableView.reloadData()
}
}
extension ContactListView: UISearchResultsUpdating {
@available(iOS 8.0, *)
func updateSearchResults(for searchController: UISearchController) {
filterContentForSearchText(searchText: searchController.searchBar.text!)
}
}
答案 0 :(得分:0)
您的意思是您选择一个单元格,然后选择另一个单元格。您想要保存哪个单元格是最后选择的单元格? 如果是这样,您可以使用lastSelectedIndexPath(可能是您想要命名的其他内容)来标记最后选择的单元格。
答案 1 :(得分:0)
对于未来的观众,这是您需要做的:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var selectedObject = searchedArray[indexPath.row]
var index = OrignalArray.index(of: selectedObject)
print("index:", index) // This will give you index of selected array from the original array.
}