2017-09-25 71 views
7

UITableViewDelegate.hJak wyłączyć całą bezstykowa na komórkę Tableview w 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); 

Jednak wracam zero w moim sposobie trailingActions i wciąż może zrobić pełny bezstykowa do usunięcia w moim tableview. Jak mogę zapobiec pełnemu przesunięciu? (Chcę, aby użytkownik miał do machnięcia następnie naciśnij przycisk „Usuń” Przycisk

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

EDIT:.. I wprowadziły canEditRowAt i zobowiązać styl edycji przed iOS 11/XCode 9/Swift 4 aktualizacji Pełne machnięcia był włączone zanim jeszcze wdrożony trailingSwipeActionsConfigurationForRowAt

+0

Czy jest jakiś powód, dla którego używasz operacji wymuszania dla tego przypadku zamiast edytować akcje? Edycja akcji jest dostępna od iOS 8.0+, a nie w systemie iOS 11.0+, co zapewnia większą elastyczność urządzeniom, które nie zostały jeszcze zaktualizowane do najnowszej wersji iOS. Mam na myśli to jako wyjaśnienie, a nie odpowiedź na twoje pytanie. –

+0

Tak naprawdę używałem akcji edycji. Zaimplementowałem canEditRowAt i zatwierdzam styl edycji. Ale z jakiegoś powodu (nawet przed zaimplementowaniem metody trailingSwipeActionsConfigurationForRowAt) włączono pełne przesunięcie. Aktualizuję moje pytanie, aby dołączyć to –

Odpowiedz

9

Wdrożenie jak poniżej:.

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 
} 

jest to linia, która wyłącza pełne bezstykowa

swipeAction.performsFirstActionWithFullSwipe = false 

I usuń pozostałe funkcje, jeśli zaimplementujesz jakieś podobne do editingStyle i editActionsForRowAt.

+0

Miałem jakąś logikę w funkcji commit editingStyle wcześniej. Czy to oznacza, że ​​przekazuję tę logikę do bloku kodu UIContextualAction? To wydaje się działać, ale zastanawiam się, czy to najlepsza praktyka. –

+0

Musisz przenieść tę logikę tutaj. –