2017-09-25 1 views
7

UITableViewDelegate.hWie deaktiviere ich den vollen Durchzug auf einer Tableview Zelle in iOS11

// 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); 

Allerdings habe ich null in meiner trailingActions Methode kehre zurück und ich kann immer noch einen vollen Durchzug tut in meinem Tableview zu löschen. Wie kann ich den vollständigen Wischvorgang verhindern? (Ich die Benutzer will, dann habe Swipe drücken Sie die Schaltfläche „Löschen“

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

EDIT:.. Ich canEditRowAt umgesetzt hatte und Bearbeiten von Stil vor dem XCode 11/iOS verpflichten 9/Swift 4 Updates Der volle Durchzug war aktiviert, noch bevor ich die trailingSwipeActionsConfigurationForRowAt umgesetzt

+0

Gibt es einen Grund, dass Sie Swipe-Aktionen für diesen Fall verwenden, anstatt Aktionen zu bearbeiten? Bearbeitungsaktionen sind seit iOS 8.0+ verfügbar und nicht auf iOS 11.0+ beschränkt. Dies würde mehr Flexibilität für Geräte bieten, die noch nicht auf die aktuelle iOS-Version aktualisiert wurden. Ich meine das als erklärender Punkt, nicht als Antwort auf Ihre Frage. –

+0

Ich habe tatsächlich Bearbeitungsaktionen verwendet. Ich hatte canEditRowAt implementiert und bearbeite Bearbeitungsstil. Aber aus irgendeinem Grund (sogar vor der Implementierung von trailingSwipeActionsConfigurationForRowAt) wurde der vollständige Swipe aktiviert. Ich aktualisiere meine Frage, um diese –

Antwort

9

wie unten implementieren.

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 
} 

das ist die Linie, die Swipe voll ist

deaktiviert

Und entfernen Sie die anderen Funktionen, wenn Sie wie editingStyle und editActionsForRowAt implementieren.

+0

Ich hatte einige Logik in der commit editingStyle Funktion vor. Bedeutet das, dass ich diese Logik in den Codeblock der UIContextualAction übertrage? Das scheint zu funktionieren, aber ich frage mich, ob das die beste Vorgehensweise ist. –

+0

Sie müssen diese Logik hier übertragen. –

Verwandte Themen