2009-05-25 16 views
7

mio pulsante Modifica è posto in viewDidLoad:editButtonItem impostato ma nessun pulsante meno?

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

si presenta in modo corretto sulla barra di navigazione, e toccando questo pulsante infatti modificarla in Fatto. Tuttavia, nessun pulsante meno appare nelle mie righe di tabella. Scorri una riga, quindi tocca Elimina, tuttavia.

Qualche idea?

EDIT 1: Ecco come sto facendo:

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

self.view = tableView; 
} 

EDIT 2: La mia osservazione è che la modifica e meno pulsanti visualizzano bene se la mia Tableview viene creato in IB (RootViewController). Gli altri due (o tre) tableview sono creati dal codice di cui sopra, quindi questo potrebbe essere il problema. Immagino che dovrei tuffarmi per isEditing, editing e quant'altro.

+1

Che cosa stai sovraccaricando? E 'solo un semplice UITableViewController? I tuoi UITableViewCells fanno qualcosa di strano (sottoclasse o altro)? Stai facendo qualcosa di divertente nel controller della vista quando restituisci il tipo modificabile di una riga? –

+0

Sì, è solo un semplice UITableViewController. Chiarirei il mio post aggiungendo del codice. –

risposta

11

Sciocco. Ho dimenticato di cambiare UIViewController (la classe ereditata da my view controller) in UITableViewController. Ora funziona.

senza fare questo, avrei bisogno di abilitare la modifica fila come manualmente:

// 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

probabilmente è necessario fare:

self.tableView = tableView; 

nel metodo loadView. Questa è la proprietà che manipola UITableViewController e viene impostata automaticamente se stai caricando la vista da un NIB. Poiché stai creando la vista in modo programmatico, devi impostarla in modo esplicito.

+0

Non c'è bisogno di farlo. La cosa più importante da ricordare è cambiare la classe genitore da UIViewController a UITableViewController. –

38

Se non sottoclasse UITableViewController, c'è un modo per farlo. Basta implementare setEditing: animato: nella sottoclasse UIViewController come segue:

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

Nota: sostituire "self.tableView" se necessario ...

aggiungere anche la "modifica" buttonto la barra degli strumenti:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.navigationItem.rightBarButtonItem = self.editButtonItem; 
} 

E questo è tutto!

+1

Tu, (signore o signora), sei un genio. – Jonathan

0

Mi sono imbattuto nello stesso problema. Secondo i documenti per UITableViewController, si legge: UITableViewController implementa il metodo superclass setEditing: animated: in modo che se un utente tocca un pulsante Modifica | Done nella barra di navigazione, il controller attiva o disattiva la modalità di modifica della tabella.

Vedere l'ultimo punto elenco nel documento UITableViewController.

1

Per mostrare e per attivare il tasto meno nell'angolo sinistro di ciascuno dei tableviewcell, effettuare le seguenti operazioni:

Aggiungere il seguente codice al metodo di viewDidLoad:

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

// È possibile che questo linea mostra i pulsanti "EDIT" e "DONE" nell'angolo in alto a destra della barra di navigazione.

E inoltre aggiungere il seguente metodo al file .m per visualizzare e animare il segno MINUS sulle celle tableview.

- (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]; 

    } 

} 
Problemi correlati