2009-05-25 9 views
7

Meine Schaltfläche Bearbeiten wird in viewDidLoad gelegt:editButtonItem set, aber keine Minus-Schaltflächen?

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

Es korrekt auf der Navigationsleiste zeigt, und es in der Tat verändern Erledigt diese Schaltfläche tippen. In meinen Tabellenzeilen werden jedoch keine Minusschaltflächen angezeigt. Wischen Sie über eine Zeile und tippen Sie dann auf "Löschen".

Irgendwelche Ideen?

EDIT 1: Hier ist, wie ich tue:

- (void)loadView { 
tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
tableView.delegate = self; 
tableView.dataSource = self; 
tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

self.view = tableView; 
} 

EDIT 2: Meine Beobachtung ist, dass die Bearbeitung und Minus-Tasten fein angezeigt, wenn mein Tableview in IB (RootViewController) erstellt wird. Die anderen zwei (oder drei) Tabellenansichten werden durch den oben genannten Code erstellt, so dass dies das Problem sein könnte. Ich schätze, ich müsste in isEditing, Editing und was nicht tun.

+1

Was überlasten Sie? Ist es nur ein einfacher alter UITableViewController? Machen Ihre UITableViewCells irgendetwas seltsam (Unterklasse oder anders)? Machen Sie etwas lustig im View-Controller, wenn Sie den bearbeitbaren Typ einer Zeile zurückgeben? –

+0

Ja, es ist einfach nur 'UITableViewController. Ich würde meinen Beitrag klarstellen, indem ich Code hinzufüge. –

Antwort

11

Dumm mich. Ich habe vergessen, UIViewController (die Klasse, von der mein View-Controller erbt) in UITableViewController zu ändern. Jetzt funktioniert es.

Ohne dies zu tun, würde ich brauche Reihe Bearbeitung manuell aktivieren möchten:

// in loadView 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(turnOnEditing)]; 

- (void)turnOnEditing { 
[self.navigationItem.rightBarButtonItem release]; 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(turnOffEditing)]; 
[self.tableView setEditing:YES animated:YES]; 
} 

- (void)turnOffEditing { 
[self.navigationItem.rightBarButtonItem release]; 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(turnOnEditing)]; 
[self.tableView setEditing:NO animated:YES]; 
} 
0

Sie müssen wahrscheinlich tun:

self.tableView = tableView; 

in Ihrem loadView Methode. Das ist die Eigenschaft, die UITableViewController manipuliert, und sie wird automatisch gesetzt, wenn Sie die Ansicht von einer NIB laden. Da Sie die Ansicht programmatisch erstellen, müssen Sie sie explizit festlegen.

+0

Das ist nicht nötig. Am wichtigsten ist es, die Elternklasse von UIViewController in UITableViewController zu ändern. –

38

Wenn Sie UITableViewController keine Unterklasse, gibt es eine Möglichkeit, es zu tun. Nur setEditing implementieren: animierte: in Ihre UIViewController Unterklasse wie folgt:

- (void) setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing: editing animated: animated]; 
    [self.tableView setEditing:editing animated:animated]; 
} 

Hinweis: Ersetzen Sie "self.tableView", wenn nötig ...

Auch die "Bearbeiten" buttonto der Symbolleiste hinzu:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.navigationItem.rightBarButtonItem = self.editButtonItem; 
} 

Und das ist alles!

+1

Sie, (Herr oder Frau), sind ein Genie. – Jonathan

0

Ich stieß auf das gleiche Problem. Gemäß den Dokumenten für UITableViewController lautet es: UITableViewController implementiert die Superklassenmethode setEditing: animated: Wenn ein Benutzer auf die Schaltfläche Edit | Done in der Navigationsleiste klickt, schaltet der Controller den Bearbeitungsmodus der Tabelle um.

Siehe den letzten Punkt in der UITableViewController doc.

1

Um zu zeigen, und die Minus-Taste an der linken Ecke jedes der tableviewcell, gehen Sie wie folgt zu aktivieren:

Fügen Sie den folgenden Code in Ihre viewDidLoad Methode:

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

// Die oben Zeile zeigt die "EDIT" und "DONE" Taste in der oberen rechten Ecke der Navigationsleiste.

Fügen Sie auch die folgende Methode zu Ihrer .m-Datei hinzu, um das MINUS-Zeichen in den Tabellenansichtszellen anzuzeigen und zu animieren.

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    [super setEditing:editing animated:animated]; 

    if(editing == YES) { 

    [self.tableView setEditing:editing animated:animated]; 

    } else { 

    [self.tableView setEditing:NO animated:animated]; 

    } 

} 
Verwandte Themen