2017-07-27 8 views
0

私はuitableViewを検索する必要があります。セルをクリックすると、そのセルにインジケーターが表示されます(マルチ選択テーブルです)。ここまではすべてがうまく動作します。しかし、何かを検索し元のテーブルに戻すと、返されたインデックスは元のインデックスではなく、間違ったセルを示します。私はstackoverflowで多くの質問が表示されますが、ストーリーボードを使用するか、Objective-c私は分かりません。フィルタリングされたuitableview swiftで元のindexpathを取得する方法3

検索されたテーブルで元の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

メモリ内のデータソースに '' rowIsSelected'''フラグを追加してください。 – Wainage

+0

@Wainageは機能しません。 –

+0

私はする必要があります。行を選択すると、コレクション内のデータに「isSelected」を追加します。そのコレクションをフィルタリングしても、行のデータソースには "isSelected"変数があります。テーブルの再レンダリングでは、そのフラグをチェックします。 – Wainage

答えて

0

あなたは一つのセルを選択し、uは最後に選択されたセルであるセル保存する別のcell.Andを選択することを意味ですか? もしそうなら、lastSelectedIndexPathを使用して、最後に選択したセルをマークすることができます。