So ändern Sie den Text der Schaltfläche "uitableview delete"

78

Hallo, ich versuche, den Text zu ändern, der in der Schaltfläche "Löschen" angezeigt wird, wenn ein Benutzer eine geeignete Ansichtszelle in meiner Tabellenansicht wischt.

Ich habe ein Beispiel in einem anderen Fragethread gesehen, das besagt, dass dieser Tableview-Delegat verwendet werden soll

- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath

Meine Frage ist, wie ich diese Methode verwende. Ich bin mir nicht sicher, wie ich diese verwenden soll.

C. Johns
quelle

Antworten:

198

In Ihrem Controller, der UITableViewdas verwaltet, sollten Sie das implementieren UITableviewDelegateund den gewünschten Titel für Ihre Methode innerhalb der titleForDeleteConfirmationButtonForRowAtIndexPathMethode zurückgeben.

Beispiel:

@interface CategoryAddViewController : UITableViewController
@end

@implementation CategoryAddViewController
// ...
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {
return @"Please don't delete me!";
}

@end

Lass dich mit so etwas aus:

Geben Sie hier die Bildbeschreibung ein

Faizan S.
quelle
Großartig, aber warum wird das Erscheinungsbild des Buttons nicht mehr animiert? Nach dem Hinzufügen wird die Schaltfläche zum Löschen angezeigt, anstatt animiert zu werden! Edit: Mein schlechtes, muss ein Sim-Fehler gewesen sein. Nach dem Neustart der App ist es wieder in Ordnung.
Maciej Swic
@FaizanS. Ich untersuche das auch. Gibt es keine Möglichkeit, nur die Eigenschaft zu ändern? So etwas wie ... self.tableView.deleteButton.name = @"Remove";anstatt die Methode zu überschreiben?
Scott
Nicht zum Zeitpunkt des Schreibens. Im iOS SDK werden viele Dinge erreicht, indem vorhandene Methoden von Basis-UI-Klassen überschrieben werden.
Faizan S.
2
der schnelle Weg:func tableView(tableView: UITableView, titleForDeleteConfirmationButtonForRowAtIndexPath indexPath:NSIndexPath) -> String{ return "Remove Me"; }
Datum
1
In dieser Antwort gibt es keinen Grund hinzuzufügen <UITableViewDelegate>.
rmaddy
31

In Swift ist es gleich, nur die Methodensignatur ist anders!

func tableView(tableView: UITableView, titleForDeleteConfirmationButtonForRowAtIndexPath indexPath: NSIndexPath) -> String? {
  return "Erase"
}
Weles
quelle
4

Geben Sie einfach die Zeichenfolge zurück, die Sie anzeigen möchten, anstatt sie zu löschen. Angenommen, Sie möchten "Löschen" für alle Zeilen anzeigen. Die obige Funktion sollte Folgendes enthalten:

return @"Erase";

Lesen Sie DIESES

Fügen Sie auch in Ihrer .h-Datei das UITableViewDelegate hinzu, falls Ihr View Controller noch kein UITableViewController ist. Das heißt, es kann entweder sein:

@interface SomeView : UIViewController <UITableViewDelegate>

ODER

@interface SomeView : UITableViewController
Bourne
quelle
0

Swift 4.2

override func tableView(_ tableView: UITableView, titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) -> String? {
        return "Erase"
    }
Gopal Kohli
quelle