Beim Löschen einer Zeile in einer Tabellenansicht möchte ich ein Aktionsblatt anzeigen, das in bestimmten Situationen nach einer Bestätigung fragt. Wenn das Aktionsblatt mit "Ja" (die destruktive Aktion) beantwortet wird, lösche ich die Tabellenzeile und alles ist in Ordnung. Aber wenn Abbrechen gedrückt wird, sehe ich immer noch die Schaltfläche Löschen in einem gedrückten Zustand.
Was ich in tableView:commitEditingStyle
beim Löschen mache ist:
Es ist auch seltsam, dass die Eigenschaft showingDeleteConfirmation
der Zelle NO
ist, obwohl die Schaltfläche Löschen immer noch sichtbar ist.
Ich verwende eine selbst erstellte blockbasierte Action Sheet-Implementierung. Vielleicht liegt da der Fehler, obwohl ich scheinbar die richtige Zelle im Cancel-Block bekomme.
Wie kann ich also den Status der Schaltfläche "Löschen" zurück auf "nicht komprimiert" setzen und entfernen und die runde Löschschaltfläche wieder in die horizontale Position bringen, so wie es geschieht, wenn ich irgendwo auf dem Bildschirm tippe?
Hilfsklasse BlockBasedActionSheet.h
:
Implementierungsdatei BlockBasedActionSheet.m
:
So funktioniert es, indem Sie das erste Code-Snippet durch dieses ersetzen
%Vor%Das erneute Laden der Zeile macht den Trick.
Aus der Dokumentation für tableView:commitEditingStyle
: Sie sollten setEditing nicht aufrufen: animiert: innerhalb einer Implementierung dieser Methode. Wenn Sie aus irgendeinem Grund mit der Methode performSelector: withObject: afterDelay: verfahren müssen, rufen Sie sie nach einer Verzögerung auf.
Mein Verständnis ist, dass diese Methode aufgerufen wird, sobald der Löschen-Button zu verschwinden beginnt (daher showingDeleteConfirmation
ist NO
) und der Inhalt Ihrer if-Anweisung in Ihrem Block nicht aufgerufen wird. Wenn Sie dort einen Haltepunkt setzen, habe ich recht?
In jedem Fall sollten Sie die Dokumentation ausführen und die Tabelle nach einer Verzögerung von einer Millisekunde wieder in den Bearbeitungsmodus versetzen.
Bearbeiten / Aktualisieren
Erstellt ein neues navigationsbasiertes Projekt in Xcode. Dieser Code wurde geändert. Stellen Sie die Tabelle so ein, dass 10 Zeilen angezeigt werden, wobei jede Zeile ihren Indexpfad als Text anzeigt. Ссылка wenn Sie die ganze Sache wollen. Sie müssen zum Löschen wischen, ich habe keine dedizierte Schaltfläche zum Löschen erstellt.
Der Aufruf von setEditing
auf dem Zellobjekt führt nichts aus, auch wenn performSelector...
verwendet wird (ich weiß nicht warum). Aber Sie können setEditing
auf dem tableView
aufrufen, was soweit ich weiß, tut, was es tun soll (bringt es zurück zu den horizontalen Löschen-Icons, ohne Löschen-Button).
Wenn das Ihr Problem nicht löst, bin ich mir nicht sicher, was sonst noch gemacht werden kann: /
%Vor%Tags und Links iphone uitableview ios