2010-09-05 4 views
7

ich meine Viewcontroller die Schaltfläche Bearbeiten in der Art und Weise zu verwenden, einrichten Apple empfiehlt:Swipe vs. Bearbeiten-Button auf dem iPhone angezapft löschen

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

Wenn der Benutzer auf die Schaltfläche Bearbeiten tippt, es bewirkt, dass die setEditing:animated: Methode auslösen. Bei dieser Methode füge ich eine "neue Zeile" hinzu oder entferne sie in Abhängigkeit von dem Wert editing (d. H. Eine Zeile, die der Benutzer tippen kann, um ein neues Element hinzuzufügen).

Wenn der Benutzer über eine Zelle wischt (nicht im Bearbeitungsmodus), ruft er auch setEditing:animated: auf, wodurch mein Code diese "neue Zeile" falsch hinzufügt. Diese neue Zeile sollte nur angezeigt werden, wenn sich der gesamte viewController im Bearbeitungsmodus befindet (d. H. Wenn die Bearbeitungsschaltfläche angetippt ist).

Wie kann ich dieses Problem beheben?

Antwort

12

Wenn Sie tableView:willBeginEditingRowAtIndexPath: und tableView:didEndEditingRowAtIndexPath:, das Verhalten der Methodenaufrufe umsetzen ...

ändern rufen Sie wird nicht mehr setEditing:animated:, müssen Sie alle Bearbeitungs Änderung Logik in den beiden oben genannten Methoden behandeln. Als Nebeneffekt davon wird self.editing nicht mehr YES sein, wenn eine Wischgeste aufgerufen wird. Dies liegt daran, dass setEditing:animated: für die Einstellung self.editing = YES verantwortlich ist.

+0

können Sie das Bild von löschen ändern? – bluezald

0

Ich habe keine Ahnung, worum es bei Ihrer "neuen Zeile" geht, aber Sie könnten Ihre Bearbeitungsschaltfläche an eine Hilfsmethode anhängen, die vor dem Aufruf von setEditing ein Flag setzt und dort prüfen kann, ob das Flag gesetzt ist . Löschen Sie dann die Markierung am Ende der Methode.

+0

Gibt es keine Möglichkeit, dies zu tun, ohne das Verhalten der Bearbeitungsschaltfläche zu überschreiben? Ich würde gerne Apples Empfehlung verwenden, wenn möglich. (Ich klärte die Frage) – Senseful

+0

Fügt das neue Reihenstandardverhalten überhaupt hinzu? Ich dachte, ein "+" oder "Hinzufügen" -Knopf wäre der konsequente Weg, dies zu tun. Wenn ein Benutzer die Edit-Taste drücken muss, um neue Elemente hinzuzufügen, werden viele Support-Mails benötigt. :-) – Eiko

+0

siehe die Kontakte-App zum Hinzufügen einer E-Mail/Telefonnummer – Senseful

0

Sinnvoll müssen Sie setEditing überschreiben: animiert: Methode. oder sogar du kannst Flag in dieser Methode setzen, wie Eiko vorgeschlagen hat.

oder andere Art und Weise ist

u benutzerdefinierte naviagtion bar implementieren. In diesem Fall benötigen Sie ein Bild der Navigationsleiste und 2 Tasten darüber. Ziel zu dieser Schaltfläche hinzufügen und Funktionalität nach Bedarf implementieren

3

Verwenden Sie die UITableViewDelegate-Methode tableView:willBeginEditingRowAtIndexPath:. Aus der Dokumentation:

"This method is called when the user swipes horizontally across a row; as a 
consequence, the table view sets its editing property to YES (thereby entering editing 
mode) and displays a Delete button in the row identified by indexPath. In this "swipe to 
delete" mode the table view does not display any insertion, deletion, and reordering 
controls. This method gives the delegate an opportunity to adjust the application's user 
interface to editing mode. When the table exits editing mode (for example, the user taps 
the Delete button), the table view calls tableView:didEndEditingRowAtIndexPath:." 

In tableView:willBeginEditingRowAtIndexPath:, einen Flag, das Editiermodus ausgelöst wurde mit Swipe zu löschen. Überprüfen Sie dann in setEditing:animated: das Flag, um zu sehen, ob der Bearbeitungsmodus normal ausgelöst wurde, oder verwenden Sie Swipe zum Löschen und führen Sie eine Aktion basierend auf dieser Prüfung durch. Zuletzt setzen Sie das Flag in tableView:didEndEditingRowAtIndexPath: zurück, so dass die Standardaktion ausgeführt wird, wenn die Edit-Taste gedrückt wird.