2010-06-15 9 views
44

Ho un UITableViewController in cui l'utente dovrebbe essere in grado di modificare gli elementi. Al fine di consentire la modifica Io uso questo:Durante la modifica, `UITableView` non chiama didSelectRowAtIndexPath ??

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

Per tutti coloro che non sa dove self.editButtonItem viene, esso è predefinito dal SDK.

Così, ora quando si preme su qualsiasi elemento, questo metodo viene chiamato:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

ma appena mi ha colpito il pulsante Modifica e durante l'editing è attiva, questo metodo non sembrava di essere chiamato.

Qualche idea di cosa mi manca?

Questo è il resto del codice che è legato alla modifica:

// Override to support conditional editing of the table view. 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Return NO if you do not want the specified item to be editable. 
    return YES; 
} 

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return UITableViewCellEditingStyleNone; 
} 


- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return NO; 
} 

Grazie per l'aiuto.

mcb

risposta

114

Ti devi impostare la proprietà allowsSelectionDuringEditing di UITableView su true.

Riferimento: UITableView - allowsSelectionDuringEditing

+0

Questo è esattamente quello che mi mancava, Grazie – elementsense

+2

Risposta magica .. _superTableView.allowsSelectionDuringEditing = true; e _superTableView.allowsSelection = true; Grazie!! – Fattie

+4

Quattro anni dopo, e stai ancora salvando delle vite! – thomax

0

si fa a impostare il self.editing = YES quando il pulsante Modifica è sfruttato?

Quando in modalità di modifica viene chiamato questo metodo, invece di didSelectRow quando si tocca consecutive:

tableView:commitEditingStyle:forRowAtIndexPath:. 
+0

Non sono sicuro che il tuo reclamo sia vero, il commit viene eseguito quando cancelli o modifichi effettivamente la cella ...leggi la mia risposta, questo è il modo per ottenere didelectRow call backs whil editing – Daniel

+0

Ciao, hai ovviamente completamente ragione! Non stavo prestando attenzione:/mi dispiace. – RickiG

-2

ma appena mi ha colpito il pulsante Modifica e durante l'editing è attiva, questo metodo non sembrava essere chiamato.

Qualche idea di cosa mi manca?

Sì. Ti aspetti che tableView:didSelectRowAtIndexPath: venga chiamato quando viene toccato un pulsante nella barra di navigazione. Questo non accadrà mai. Questo metodo viene chiamato solo quando viene selezionata una riga.

Quando si tocca il pulsante di modifica, si desidera mettere la tabella in modalità di modifica. Nel vostro controller della vista:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    [super setEditing:editing animated:animated]; // must be called first according to Apple docs 

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

Poi si gestisce la modifica di eventi con l'aggiunta di un metodo tableView:commitEditingStyle:forRowAtIndexPath:.

+1

Chiede perché isSelectRow non viene chiamato mentre sta modificando, non si aspetta che si verifichi quando tocca la modifica – Daniel

+0

@Daniel Se guardi da vicino, vedrai che ho risposto alla domanda così come era stata posta. –

0

Ho risolto questo problema in un altro modo. Il mio pulsante Modifica era sulla mia barra di navigazione e questo è stato il motivo per cui non è stato chiamato. Dopo aver incorporato VC all'interno del Navigation Controller e aver inserito il nuovo pulsante Modifica all'interno della sua voce di navigazione, il pulsante Modifica è stato avviato per essere richiamato.

Problemi correlati