Recientemente implementado trailingSwipeActionsConfigurationForRowAt , donde después de deslizar de derecha a izquierda se muestran dos opciones y funciona bien. Pero el problema es que cuando selecciono varias filas o una sola fila, después de deslizar las filas, se deseleccionan. ¿Hay alguna manera de mantener la selección incluso después de deslizar?
A continuación se muestra mi código
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let renameAction = contextualToggleRenameAction(forRowAtIndexPath: indexPath) let lastResAction = contextualToggleLastResponseAction(forRowAtIndexPath: indexPath) let swipeConfig = UISwipeActionsConfiguration(actions: [renameAction, lastResAction]) swipeConfig.performsFirstActionWithFullSwipe = false return swipeConfig } func contextualToggleLastResponseAction(forRowAtIndexPath indexPath: IndexPath) -> UIContextualAction { let sensorData = sensorsList?[indexPath.row] var lastResponse = "" if sensorData != nil{ if let lstRes = sensorData!["last_response"] as? String{ lastResponse = lstRes } } let action = UIContextualAction(style: .normal, title: lastResponse) { (contextAction: UIContextualAction, sourceView: UIView, completionHandler: (Bool) -> Void) in print("Last Response Action") } action.backgroundColor = UIColor(red: 61/255, green: 108/255, blue: 169/255, alpha: 1.0) return action }Mierda, arreglé este estúpido problema.
Sí, sí, asegúrese de que tableView.allowsSelectionDuringEditing = true y tableView.allowsMultipleSelectionDuringEditing = true.
Pero...
Un saludo a esta respuesta SO que me llevó casi directamente en el camino hacia el éxito ( ver aquí ).
CLAVE: Vuelva a seleccionar/deseleccione las filas en su implementación de setEditing, que es un método que anula. UITableView entra en modo de edición al deslizar.
NOTA IMPORTANTE: Llame a super.setEditing(...) antes de cualquiera de sus códigos, como se muestra a continuación, o probablemente no funcionará, o al menos no perfectamente.
override func setEditing(_ editing: Bool, animated: Bool) { super.setEditing(editing, animated: animated) for i in 0..<your data.count { if this item is selected { self.tableView.selectRow(at: IndexPath(row: i, section: 0), animated: false, scrollPosition: .none) } else { self.tableView.deselectRow(at: IndexPath(row: i, section: 0), animated: false) } } }Un deslizamiento se considera una edición, por lo que puede habilitar allowsSelectionDuringEditing si desea mantener el estado seleccionado:
tableView.allowsSelectionDuringEditing = trueDependiendo de indexPathsForSelectedRows no siempre da el resultado esperado.
En su lugar, debe mantener una matriz de selectedIndexPaths .
Aquí hay un fragmento de código para demostrar:
var selectedIndexPaths = [IndexPath]() func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if selectedIndexPaths.contains(indexPath) { selectedIndexPaths.removeAll { (ip) -> Bool in return ip == indexPath }else{ selectedIndexPaths.append(indexPath) } }