Jak mogę wyświetlić przycisk usuwania, gdy przesuwasz po UITableViewCell
? Zdarzenie nigdy nie jest wywoływane, a przycisk usuwania nigdy się nie pojawia.
ios
uitableview
cocoa-touch
uikit
TheLearner
źródło
źródło
UITableViewCell
s.Odpowiedzi:
Podczas uruchamiania w
(-viewDidLoad or in storyboard)
do:Zastąp w celu obsługi warunkowej edycji widoku tabeli. Należy to zaimplementować tylko, jeśli zamierzasz wrócić
NO
po niektóre przedmioty. Domyślnie wszystkie elementy można edytować.źródło
self.tableView.allowsMultipleSelectionDuringEditing = NO;
aby lewy ruch machnięcia zadziałał. Dla mnie to brzmi jak błąd, ponieważ tabela NIE jest w stanie edycji. Ta opcja powinna mieć zastosowanie tylko „Podczas edycji”. Jednak teraz działa i ustawiam go na TAK, gdy tabela przechodzi w stan edycji.Ta odpowiedź została zaktualizowana do wersji Swift 3
Zawsze myślę, że miło jest mieć bardzo prosty, samodzielny przykład, aby nie zakładać niczego, gdy uczę się nowego zadania. Ta odpowiedź dotyczy usuwania
UITableView
wierszy. Projekt działa w następujący sposób:Ten projekt jest oparty na przykładzie UITableView dla Swift .
Dodaj kod
Utwórz nowy projekt i zamień kod ViewController.swift na następujący.
Metoda jednego klucza w powyższym kodzie, która umożliwia usuwanie wierszy, jest ostatnią. Tutaj jeszcze raz do podkreślenia:
Storyboard
Dodaj
UITableView
kontroler widoku w serii ujęć. Użyj automatycznego układu, aby przypiąć cztery strony widoku tabeli do krawędzi kontrolera widoku. Kontroluj przeciąganie z widoku tabeli w serii ujęć do@IBOutlet var tableView: UITableView!
linii w kodzie.Skończone
To wszystko. Powinieneś być teraz w stanie uruchomić aplikację i usunąć wiersze, przesuwając palcem w lewo i stukając „Usuń”.
Wariacje
Zmień tekst przycisku „Usuń”
Dodaj następującą metodę:
Niestandardowe akcje przycisków
Dodaj następującą metodę.
Pamiętaj, że jest to dostępne tylko w systemie iOS 8. Aby uzyskać więcej informacji, zobacz tę odpowiedź .
Zaktualizowano dla iOS 11
Działania można umieszczać na początku lub na końcu komórki za pomocą metod dodanych do interfejsu API UITableViewDelegate w iOS 11.
Dalsza lektura
źródło
UITableView
jednego , jest to całkowicie samodzielny projekt i nie trzeba robić niczego, co nie jest opisane tutaj. Powodem, dla którego zacząłem ustawiać go w kodzie jest to, że wymaga mniej wyjaśnień w moich odpowiedziach. Powinienem wrócić i edytować podstawowy przykład, aby użyć kodu.Ten kod pokazuje, jak zaimplementować usuwanie.
Opcjonalnie w zastąpieniu inicjalizacji dodaj wiersz poniżej, aby wyświetlić pozycję przycisku Edytuj:
źródło
Miałem problem, który właśnie rozwiązałem, dlatego dzielę się nim, ponieważ może komuś pomóc.
Mam UITableView i dodałem pokazane metody, aby umożliwić przeciągnięcie, aby usunąć:
Pracuję nad aktualizacją, która pozwala mi przełączyć tabelę w tryb edycji i umożliwia wybór wielu elementów. Aby to zrobić, dodałem kod z próbki Apple TableMultiSelect . Gdy już działałem, stwierdziłem, że funkcja machnięcia usuwania przestała działać.
Okazuje się, że problem polegał na dodaniu następującego wiersza do viewDidLoad:
Po włączeniu tej linii multiselekty działałyby, ale przesunięcie palcem po usunięciu nie działało. Bez linii było odwrotnie.
Poprawka:
Dodaj następującą metodę do kontrolera viewController:
Następnie w metodzie, która wprowadza tabelę w tryb edycji (na przykład po naciśnięciu przycisku), powinieneś użyć:
zamiast:
Oznacza to, że wielokrotny wybór jest aktywny tylko wtedy, gdy tabela jest w trybie edycji.
źródło
Poniżej UITableViewDataSource pomoże Ci usunąć przeciągnięcie
arrYears jest NSMutableArray, a następnie ponownie ładuje tableView
Szybki
źródło
W iOS 8 i Swift 2.0 spróbuj tego,
źródło
Odpowiedź @ Kurbza jest niesamowita, ale chcę zostawić tę notatkę i mam nadzieję, że ta odpowiedź może zaoszczędzić ludziom trochę czasu.
Czasami miałem te linie w moim kontrolerze i sprawiły, że funkcja przesuwania nie działała.
Jeśli używasz
UITableViewCellEditingStyleInsert
lubUITableViewCellEditingStyleNone
jako stylu edycji, funkcja przeciągania nie działa. Możesz używać tylkoUITableViewCellEditingStyleDelete
, co jest stylem domyślnym.źródło
Szybki 4
źródło
Można to również osiągnąć w SWIFT, stosując następującą metodę
źródło
Szybki 3
Wystarczy włączyć te dwie funkcje:
źródło
Wiem, że to stare pytanie, ale odpowiedź @Kurbz potrzebuje tego tylko dla Xcode 6.3.2 i SDK 8.3
Potrzebuję dodać
[tableView beginUpdates]
i[tableView endUpdates]
(dzięki @ bay.phillips tutaj )źródło
Kiedy usuwasz komórkę widoku tabeli, musisz również usunąć obiekt tablicy o indeksie x.
Myślę, że możesz to usunąć za pomocą gestu machnięcia. Widok tabeli wywoła delegata:
Po usunięciu obiektu. Musisz przeładować użycie widoku tabeli. Dodaj następujący wiersz w kodzie:
następnie pomyślnie usunąłeś wiersz. Po ponownym załadowaniu widoku lub dodaniu danych do źródła danych obiekt już tam nie będzie.
Dla wszystkich pozostałych odpowiedź Kurbza jest poprawna.
Chciałem tylko przypomnieć, że funkcja delegowania nie wystarczy, jeśli chcesz usunąć obiekt z tablicy DataSource.
Mam nadzieję, że ci pomogłem.
źródło
[tableView reloadData]
dzwonić[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]
.źródło
Swift 2.2:
źródło
W przypadku Swift po prostu napisz ten kod
Dla celu C po prostu napisz ten kod
źródło
dla kodu swift4, najpierw włącz edycję:
następnie dodajesz akcję usuwania do edytowanego delegata:
źródło
Swift 4,5
Aby usunąć komórkę po przeciągnięciu, istnieją dwie wbudowane metody UITableView. Napisz tę metodę w rozszerzeniu TableS dataSource.
źródło
Jeśli adoptujesz różne źródła danych, musisz przenieść wywołania zwrotne delegatów do
UITableViewDiffableDataSource
podklasy. Na przykład:źródło