iOS11 a introduit trailingSwipeActionsConfigurationForRowAt
(et en tête ...). Est-ce que cela signifie que je dois maintenant mettre en œuvre
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.
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.
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.
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.
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