2011-10-27 14 views
9

Ho cercato di imparare la nuova funzione Storyboard in Xcode e ho avuto un problema con il tentativo di impostare un UITableView in modalità di modifica.Storyboard per iPhone Modifica di una vista tabella

Finora il mio storyboard assomiglia a questo:

navigationController -> UIViewController (sottoclasse con la proprietà Tableview)

ho aggiunto una voce di navigazione e un elemento della barra del tasto per la scena vista del regolatore, così faccio vedere un pulsante di modifica. Non ha fatto nulla di automatico, quindi ho provato a collegare il selettore al metodo setEditing del delegato tableview. Questo lo ha messo in modalità di modifica. Tuttavia, il pulsante di modifica non è cambiato in un pulsante "Fatto" e quindi non c'è modo di uscire dalla modalità di modifica.

Devo creare un'altra voce di navigazione per il pulsante Fine? Come posso collegarlo in modo che appaia al momento giusto e funzioni correttamente?

risposta

13

Ho appena iniziato a utilizzare storyboard, così ho anche voluto usare Storyboard di aggiungere il mio pulsante Modifica. È fastidioso aver avuto il tempo di imparare come usare un nuovo strumento, ma è necessario trovare un rotolo di nastro adesivo per riparare i buchi.

È possibile farlo funzionare, ma è necessario aggiungere un pulsante personalizzato. Nella finestra di ispezione Attributi assicurati che l'Identificatore sia Personalizzato e il titolo sia Modifica.

Quindi aggiungere qualcosa di simile nel tuo .m

- (IBAction)setEditMode:(UIBarButtonItem *)sender { 
    if (self.editing) { 
     sender.title = @"Edit"; 
     [super setEditing:NO animated:YES]; 
    } else { 
     sender.title = @"Done"; 
     [super setEditing:YES animated:YES]; 
    } 
} 

Avere il pulsante personalizzato Modifica chiamare il metodo setEditMode.

Può solo sperare che risolveranno l'implementazione del pulsante Modifica nell'editor di Storyboard in futuro.

5

Se si utilizza il controller di navigazione per passare al controller di visualizzazione, è sufficiente impostare self.navigationItem.rightBarButtonItem = self.editButtonItem;, che inserirà il pulsante Modifica predefinito a destra. Se la barra di navigazione non è visibile, chiama self.navigationController.navigationBarHidden = NO;. Questi sarebbero chiamati nel metodo viewDidLoad o qualcosa di simile. Poi, al fine di ottenere il tableView di rispondere alla chiamata di modifica, utilizzare il seguente metodo:

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

Questo dovrebbe fare quello che vuoi che faccia. In caso di problemi, basta dirlo e siamo in grado di restringere i dettagli

+1

Sì, so come farlo programmaticamente, ma ho cercato di farlo attraverso lo Storyboar d UI. – markplee

+0

Dovrebbe essere praticamente lo stesso. Ho usato anche l'interfaccia utente Storyboard (che devo dire rende la vita molto più semplice) e ho dovuto fare cose simili ed è così che ho fatto. Ho notato che a volte devi passare 'self.parentViewController.navigationItem.rightBarButtonItem = yourButton;' a volte per ottenere la vista desiderata nella tua gerarchia. Ma il resto dovrebbe rimanere lo stesso di prima finché il tuo TableView è collegato a viewController come IBOutlet – justin

+0

C'è qualche notizia a riguardo? State cercando di capire come sostituire il LOC con la nuova funzione Storyboard. Basta mettere un pulsante nella barra di navigazione e nominarlo "Modifica" non funziona ovviamente. ;) –

27

penso che anche con Storyboard, l'unico modo (di sicuro, il più facile) per attuare un lavoro modifica tasto/fatto, è utilizzare il seguente codice:

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
... 
//set the edit button 
self.navigationItem.leftBarButtonItem = self.editButtonItem; 
... 

Questa è la soluzione che Apple stessa implementa se si seleziona un modello "master-Detail Application" per il vostro progetto.

Probabilmente Storyboard è ancora perfetto, e spero che sarà migliorata da Apple nelle prossime releases ...

6

In sintesi:

The Button, restituito da UIViewController.editButtonItem un pulsante speciale commutazione con un comportamento speciale che chiama - (void)setEditing:(BOOL)editing animated:(BOOL)animated se premuto.

Il pulsante, restituito da UINavigationController.editButtonItem è un semplice pulsante, appena etichettato con "Modifica".

Lo Storyboard consente di selezionare quest'ultimo.

1

uno può usare il pulsante Modifica stupido, non funzionante dall'editor Storyboard e quindi sostituirlo a livello di codice con UIViewController.editButtonItem.

in viewDidLoad:

NSMutableArray *toolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems]; 

[toolbarItems replaceObjectAtIndex:0 withObject:self.editButtonItem]; 

[self setToolbarItems:toolbarItems];  

questo codice presuppone che si è aggiunto il tasto muto Modifica come l'elemento più a sinistra della barra degli strumenti nella Storyboard.

+0

Questo è un po 'hacky ma è preferibile re-implementare il pulsante di modifica. – SeanR

+0

cosa c'è di hacker al riguardo? grazie – kitschmaster

+0

L'uso del codice per sostituire il pulsante che hai aggiunto in Interface Builder con il pulsante dovrebbe essere davvero un po 'un trucco ... ma è una lacuna da parte di Apple che ci costringe a farlo in questo modo. Non fraintendetemi, penso che questa sia la soluzione migliore per Apple che supporta il pulsante Modifica reale in Interface Builder. – SeanR

2

Per aggiungere alla risposta @Graham, è anche possibile cambiare lo stile in modo da poter avere lo stile del pulsante "Fatto" (il colore blu). Qualcosa di simile a questo:

- (IBAction)setEditMode:(UIBarButtonItem *)sender { 
    if (self.editing) { 
     sender.title = @"Edit"; 
     sender.style = UIBarButtonItemStylePlain; 
     [super setEditing:NO animated:YES]; 
    } else { 
     sender.title = @"Done"; 
     sender.style = UIBarButtonItemStyleDone; 
     [super setEditing:YES animated:YES]; 
    } 
} 
1

Nel caso in cui si dispone di UIViewController e all'interno di questo si è aggiunto un UITableView. Se si desidera aggiungere una modifica UIBarButton al fine di interagire con UITableView, provare:

Aggiungi questa linea ...

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    ... 

    self.navigationItem.leftBarButtonItem = self.editButtonItem; 

    ... 
} 

e questo metodo

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 

    [super setEditing:editing animated:animated]; 
    [self.myListTableView setEditing:editing animated:animated]; 

    if(self.myListTableView.editing) { 
     NSLog(@"editMode on"); 
    } else { 
     NSLog(@"editMode off"); 
    } 
} 

dove

@property (weak, nonatomic) IBOutlet UITableView *myListTableView; 
Problemi correlati