web-dev-qa-db-fra.com

Comment désactiver le balayage complet sur une cellule de table dans iOS11

UITableViewDelegate.h

// Swipe actions
// These methods supersede -editActionsForRowAtIndexPath: if implemented
// return nil to get the default swipe actions
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);

Cependant, je retourne nil dans ma méthode trailingActions et je peux toujours faire un balayage complet pour supprimer dans ma table. Comment puis-je empêcher le balayage complet? (Je veux que l'utilisateur ait à glisser puis appuyez sur le bouton "Supprimer".

@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    return nil
}

EDIT: J'avais implémenté canEditRowAt et validé le style d'édition avant la mise à jour iOS 11/XCode 9/Swift 4. Le balayage complet a été activé avant même que j'implémente le trailingSwipeActionsConfigurationForRowAt.

17
Megan Moreno

Implémentez comme ci-dessous:

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let delete = UIContextualAction(style: .destructive, title: "Delete") { (action, sourceView, completionHandler) in
        print("index path of delete: \(indexPath)")
        completionHandler(true)
    }
    let swipeAction = UISwipeActionsConfiguration(actions: [delete])
    swipeAction.performsFirstActionWithFullSwipe = false // This is the line which disables full swipe
    return swipeAction
}

Ceci est la ligne qui désactive le balayage complet

swipeAction.performsFirstActionWithFullSwipe = false 

Et supprimez les autres fonctions si vous implémentez des fonctions comme editingStyle et editActionsForRowAt.

27
Vini App

J'ai pu désactiver les actions de balayage pour des cellules particulières en suivant cette réponse: https://stackoverflow.com/a/50597672/1072262

Au lieu de retourner zéro, vous pouvez retourner:

return UISwipeActionsConfiguration.init()
2
virtas