如何在过滤的uitableview swift 3中获取原始索引路径

时间:2017-07-27 09:09:53

标签: uitableview swift3

我有 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!)
    }
}

2 个答案:

答案 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.
}