2010-05-05 14 views
10

Mi sento come se avessi un po 'di nocciola qui. Ho una vista dettagliata con alcuni stand alone UITextField s, alcuni UITextFields in UITAbleViewCell s e uno singolo UITableViewCell che verrà utilizzato per contenere le note, se ce ne sono. Voglio solo questa cella selezionabile quando sono in modalità di modifica. Quando non sono in modalità di modifica, non voglio essere in grado di selezionarlo. Selezionando la cella (mentre in modalità di modifica) si attiva un metodo che avvierà una nuova vista. So che è molto facile, ma mi manca qualcosa da qualche parte.Configurare correttamente willSelectRowAtIndexPath e didSelectRowAtIndexPath per inviare selezioni di celle

Questi sono i metodi che hai scelto che sto usando:

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (!self.editing) { 
     NSLog(@"Returning nil, not in edit mode"); 
     return nil; 
    } 
    NSLog(@"Cell will be selected, not in edit mode"); 
    if (indexPath.section == 0) { 
     NSLog(@"Comments cell will be selected"); 
     return indexPath; 
    } 
    return nil; 
} 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (!self.editing) { 
     NSLog(@"Not in edit mode. Should not have made it this far."); 
     return; 
    } 

    if (indexPath.section == 0) 
     [self pushCommentsView]; 
    else 
     return; 
} 

Il mio problema è in realtà 2 volte;

1) Anche quando non sono in modalità di modifica, e so che sto restituendo nil (a causa del messaggio NSLog), posso ancora selezionare la riga (lampeggia in blu). Dalla mia comprensione del metodo willSelectRowAtIndexPath, questo non dovrebbe accadere. Forse mi sbaglio di questo?

2) Quando si accede alla modalità di modifica, non è possibile selezionare nulla. il metodo willSelectRowAtIndexPath non si attiva mai e nemmeno lo didSelectRowAtIndexPath. L'unica cosa che sto facendo nel metodo setEditing, è nascondere il pulsante Indietro durante la modifica e assegnare firstResponder al campo testo in alto per far apparire la tastiera. Ho pensato che forse il primo interlocutore avrebbe interferito con il click (che sarebbe stato stupido), ma anche con quello commentato, non posso eseguire la selezione della cella durante la modifica.

risposta

16

Buon Dio sono un idiota. Non ho mai aggiunto queste righe:

self.tableView.allowsSelection = NO; // Keeps cells from being selectable while not editing. No more blue flash. 
self.tableView.allowsSelectionDuringEditing = YES; // Allows cells to be selectable during edit mode. 

Ci scusiamo per la domanda spazzatura.

+1

In Xcode 4.2/iOS5, questi possono essere impostati su TableView in Interface Builder. –

+0

Risolto scegliendo "Selezione singola" nell'opzione "selezione" di Storyboard/Interface Builder. GRAZIE! –

4

La documentazione rileva che tableView:willSelectRowAtIndexPath: non viene chiamato in modalità modifica. Inoltre, il flash blu si verificherà anche se si annulla la selezione. Dalla documentazione:

Questo metodo non viene chiamato fino a quando gli utenti non toccano una riga e quindi sollevano il dito; la riga non è selezionata fino a quel momento, anche se è evidenziata sul touch-down. Puoi usare UITableViewCellSelectionStyleNone per disabilitare l'aspetto dell'evidenziazione della cella sul touch-down. Questo metodo non viene chiamato quando la proprietà di modifica della tabella è impostata su SÌ (ovvero, la vista tabella è in modalità di modifica).

+1

Grazie per la risposta. Mi ha permesso di ricontrollare i documenti, il che mi ha fatto capire il mio stupido errore. –

+0

Voglio solo chiarire questa risposta citando la documentazione per intero: "... Questo metodo non viene chiamato quando la vista tabella è in modalità di modifica (ovvero, la proprietà di modifica della vista tabella è impostata su SÌ) ** a meno che la vista tabella non consenta la selezione durante la modifica (ovvero, la proprietà allowSelectionDuringEditing della vista tabella sia impostata su SÌ). ** " – Pat

Problemi correlati