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!)
}
}
メモリ内のデータソースに '' rowIsSelected'''フラグを追加してください。 – Wainage
@Wainageは機能しません。 –
私はする必要があります。行を選択すると、コレクション内のデータに「isSelected」を追加します。そのコレクションをフィルタリングしても、行のデータソースには "isSelected"変数があります。テーブルの再レンダリングでは、そのフラグをチェックします。 – Wainage