2010-09-05 10 views
7

Ho impostato il mio viewController di utilizzare il pulsante di modifica nel modo in cui Apple raccomanda vs.:Swipe per eliminare pulsante Modifica premuto su iPhone

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

Quando l'utente tocca il pulsante di modifica, che provoca il metodo setEditing:animated: a grilletto. In questo metodo, aggiungo o rimuovo una "nuova riga" a seconda del valore editing (ad esempio una riga che l'utente può toccare per aggiungere un nuovo elemento).

Quando l'utente scorre su una cella (mentre non è in modalità di modifica), chiama anche setEditing:animated:, il che causa il mio codice per aggiungere questa "nuova riga" in modo errato. Dovrebbe mostrare questa nuova riga solo quando l'intero viewController è in modalità di modifica (ad esempio quando si tocca il pulsante di modifica).

Come posso risolvere questo problema?

risposta

12

Se si implementa tableView:willBeginEditingRowAtIndexPath: e tableView:didEndEditingRowAtIndexPath:, il comportamento delle chiamate di metodo cambieranno ...

Non sarà più chiamata setEditing:animated:, è necessario gestire ogni logica editing cambiamento all'interno dei due metodi. Come effetto collaterale, self.editing non sarà più YES quando viene richiamato un gesto di scorrimento. Questo perché setEditing:animated: è responsabile dell'impostazione di self.editing = YES.

+0

puoi cambiare l'immagine dell'eliminazione? – bluezald

0

Non ho idea di cosa sia la "nuova riga", ma è possibile collegare il pulsante di modifica a un metodo di supporto che imposta un flag prima di chiamare setEditing, e lì è possibile controllare se il suddetto flag è impostato e comportarsi di conseguenza . Quindi deselezionare la bandiera alla fine del metodo.

+0

Non c'è un modo per farlo senza sovrascrivere il comportamento del pulsante di modifica? Mi piacerebbe usare la raccomandazione di Apple, se possibile. (Ho chiarito la domanda) – Senseful

+0

È comunque l'aggiunta del comportamento standard della nuova riga? Ho pensato che un pulsante "+" o "Aggiungi" sarebbe stato il modo coerente per farlo. Se un utente deve premere modifica per aggiungere nuovi elementi, richiede molti messaggi di supporto. :-) – Eiko

+0

vedi l'app Contatti per aggiungere un email/telefono – Senseful

0

Senseful deve sovrascrivere setEditing: animato: metodo. o anche tu puoi impostare il flag in questo metodo come suggerito da Eiko.

o altro modo è

u attuare bar naviagtion personalizzato. in tal caso hai bisogno di un'immagine della barra di navigazione e di 2 pulsanti sopra di essa. aggiungi la destinazione a tale pulsante e implementa le funzionalità come richiesto

3

Utilizzare il metodo UITableViewDelegatetableView:willBeginEditingRowAtIndexPath:. Dalla documentazione:

"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:, impostare un flag che modalità di modifica è stata attivata tramite colpo da eliminare. Quindi, in setEditing:animated:, controllare il flag per verificare se la modalità di modifica è stata attivata normalmente o utilizzando il metodo swipe per eliminare ed eseguire un'azione in base a tale controllo. Infine, reimposta il flag in tableView:didEndEditingRowAtIndexPath: in modo che l'azione predefinita venga eseguita quando viene premuto il pulsante di modifica.

Problemi correlati