Estoy tratando de desactivar el deslizamiento para eliminar la acción de algunas celdas particulares en la vista de tabla. pero no pude encontrar una buena solución en swift. No quiero ese lado izquierdo menos signo en la celda al anular el método "tableView.isEditing = true". Aquí está mi código. el siguiente código no deshabilita deslizar a la celda con statusId "12". Espero que entiendas mi problema.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath) as! TableViewDateCell
    cell.titleStatus.text = mainList[indexPath.row].statusName
    //tableView.isEditing = true
    //disable swipe to delete for cell with statusId == "12"
    if mainList[indexPath.row].statusId == "12" {
         //tableView.isEditing = false
        cell.selectionStyle = UITableViewCellSelectionStyle.gray
        cell.isUserInteractionEnabled = false

    }
 }


func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

}
8
John 2 mar. 2018 a las 09:08

5 respuestas

La mejor respuesta

Puede personalizar la función de UITableViewDelegate editingStyleForRowAt, especialmente devolviendo UITableViewCellEditingStyle.none cuando no necesita deslizar, algo como:

public func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle
{
   if mainList[indexPath.row].statusId == "12" {
        return UITableViewCellEditingStyle.none
    } else {
        return UITableViewCellEditingStyle.delete
    }
}
20
Andrea Mugnaini 2 mar. 2018 a las 06:16

Utilice este método de delegado de vista de tabla

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {

}

Documentation tableView: canEditRowAtIndexPath:

3
Vishal16 2 ago. 2019 a las 11:57

Estaba intentando deshabilitar / habilitar la función de eliminación cuando edito myTableview. Esta es mi solución:

public func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle
{
    if !myTableView.isEditing {
        return UITableViewCell.EditingStyle.none
    } else {
        return UITableViewCell.EditingStyle.delete
    }
}
0
Thanh Nhật 4 may. 2019 a las 17:36

Gracias por publicar esta pregunta y las respuestas anteriores.

En una expansión de las respuestas, tenía una fila predeterminada que nunca debería eliminarse, así que configuré una etiqueta en esa celda en particular y luego al principio usé este método.

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    if tableView.cellForRow(at: indexPath)?.tag == 100 {
        return false
    }
    return true
}

SIN EMBARGO - Esto causó la siguiente advertencia en Debugger:

Intentó llamar a -cellForRowAtIndexPath: en la vista de tabla mientras estaba en el proceso de actualizar sus celdas visibles, lo cual no está permitido.

Entonces, como han dicho otros comentaristas, use este método a continuación:

Swift 5.0

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
    if tableView.cellForRow(at: indexPath)?.tag == 100 {
        return UITableViewCell.EditingStyle.none
    } else {
        return UITableViewCell.EditingStyle.delete
    }
}
0
user3580269 17 dic. 2019 a las 04:39

Swift 4.2 dentro de viewDidLoad simplemente establece el valor de su tabla en ...

myTableView.isEditing = false
-2
Zoe 26 mar. 2019 a las 15:36