web-dev-qa-db-fra.com

Pour UITableView, dois-je implémenter trailingSwipeActionsConfigurationForRowAt et/ou editActionsForRowAt?

iOS11 a introduit trailingSwipeActionsConfigurationForRowAt (et en tête ...). Est-ce que cela signifie que je dois maintenant mettre en œuvre

  1. les méthodes de fin/principales pour contrôler le balayage pour iOS11ET
  2. editActionsForRowAt pour iOS10?

Comment faire en sorte que le simulateur exécute des simulations iOS10 pour voir le comportement de mon application dans le système d'exploitation de niveau antérieur? Puisque tout est maintenant iOS11, je ne suis pas sûr de savoir comment mon application sera dans cette version?

Pour clarifier: je veux des actions pour les lignes, mais je ne veux pas du comportement par défaut dans iOS11 de performsFirstActionWithFullSwipe. Si je viens d'implémenter editActionsForRowAt, iOS11 effectuera le balayage complet.

6
zkon

Si vous voulez une forme d’action de ligne, vous devez:

Implémentez simplement editActionsForRowAt et cela fonctionnera pour iOS 10 et 11.

ou:

Implémentez editActionsForRowAt sur iOS 10 et implémentez les méthodes de fin/balayage sur iOS 11 - qui sont légèrement plus sophistiquées.

ou:

Ignorer iOS 10 et ne prendre en charge que les actions de fin/balayage d'iOS 11, car la plupart de vos clients utiliseront probablement iOS 11 de toute façon - et les actions de ligne sont généralement considérées comme des fonctionnalités facultatives.


Si vous ne voulez pas le comportement de balayage complet, vous ne pouvez le faire que sur iOS 11, où vous pouvez définir performsFirstActionWithFullSwipe sur false.


Les méthodes de balayage complet ne sont pas disponibles avant iOS 11. Elles ne fonctionneront pas dans iOS 10.

3
Daniel

Selon vos besoins:

Je veux des actions pour les lignes, mais je ne veux pas du comportement par défaut dans iOS11 de performFirstActionWithFullSwipe. Si je viens d'implémenter editActionsForRowAt, iOS11 effectuera le balayage complet.

Sous iOS-10 et inférieur,

pour que le edit actions fonctionne dans une UITableView, implémentez simplement les méthodes ci-dessous:

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

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]?
{
    let deleteAction = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexpath) in
        //YOUR_CODE_HERE
    }
    deleteAction.backgroundColor = .red
    return [deleteAction]
}

Sous iOS-11,  

Deux nouvelles méthodes ont été introduites pour prendre en charge la modification dans UITableView, c’est-à-dire leadingSwipeActionsConfigurationForRowAt et trailingSwipeActionsConfigurationForRowAt.

Selon Apple ,

Actions de balayage 

Ces méthodes remplacent -EditActionsForRowAtIndexPath: si implémenté 

renvoie nil pour obtenir les actions de balayage par défaut

Ainsi, vous pouvez implémenter ces 2 méthodes pour obtenir le comportement/ iOS-11 . Même si vous n'avez pas editActionsForRowAt, on vous appellera.

Si vous ne voulez pas que default full swipe behaviour of edit action soit dans iOS-11 , définissez simplement performsFirstActionWithFullSwipe to false.

Exemple:

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

@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
{
    let deleteAction = UIContextualAction(style: .destructive, title: "Delete") { (action, view, handler) in
        //YOUR_CODE_HERE
    }
    deleteAction.backgroundColor = .red
    let configuration = UISwipeActionsConfiguration(actions: [deleteAction])
    configuration.performsFirstActionWithFullSwipe = false
    return configuration
}

Faites-moi savoir si vous rencontrez toujours des problèmes.

7
PGDev

D'après mon expérience, si vous souhaitez un mode d'édition, ainsi qu'un balayage personnalisé, vous avez besoin de editActions… ainsi que de trailing/leading… sur iOS 11.

0
David Dunham

Elle est déclarée facultative, alors non, vous n'avez pas à l'implémenter. Je suppose que l'implémentation par défaut est de ne rien faire

0
Mars