UITableView didSelectRowAtIndexPath: non chiamato al primo touch

Sto didSelectRowAtIndexPath un problema con didSelectRowAtIndexPath UITableView's .

La mia tabella è impostata in modo tale che quando seleziono la riga, inizializza un nuovo controller di visualizzazione e lo spinge.

La prima volta che tocchi qualsiasi riga nella tabella, il metodo non viene chiamato. Una volta che seleziono un’altra riga, inizia a funzionare normalmente.

Ho verificato questo impostando un breakpoint su didSelectRowAtIndexPath . Quando aggiungo un NSLog al metodo, vedo che quando seleziono la seconda riga che finalmente spinge il nuovo controller di visualizzazione, vedo due istruzioni di registro visualizzate nella console contemporaneamente.

Eventuali suggerimenti?

Ogni possibilità che hai digitato accidentalmente ha fatto De selectRowAtIndexPath?

Controlla anche la proprietà di selezione della tua vista tabella nel file xib. Utilizzare ‘Selezione singola’ o ‘Selezione multipla’ come richiesto.

Ho riscontrato il seguente problema:

  • prima tocca una riga -> nessun effetto, nessuna selezione, mai
  • secondo touch e seguenti -> corretto comportamento di selezione, sempre

Nel mio caso, il mio errore era controllare Show Selection on Touch in Interface Builder. Puoi deselezionarlo in IB qui:

inserisci la descrizione dell'immagine qui

Spero che aiuti qualcuno

Verifica Se sono stati impostati tutti i riconoscitori di gesti nella tua class. La rimozione del gesto ha funzionato per me.

Ho discusso anche pubblicando questa risposta perché penso che le stelle siano allineate in modo che questo si manifesti.

Sto avendo una variazione di questo problema e ho controllato le altre soluzioni. Nella mia vista tabella non sta elaborando l’ultima riga del mio tavolo al primo touch. Lo evidenzia, ma didSelectRowAtIndexPath non viene chiamato. Tutte le altre righe funzionano bene. Ma se accendo il punto di vista del tavolo, allora sembra che risolva il problema (ma poi devi affrontare un rimbalzo della tabella).

UITableViewCellSelectionStyleNone è stato impostato per la cella che visualizza il problema (ios9).

Ho finito per chiamare

 [tableView deselectRowAtIndexPath:indexPath animated:NO]; 

prima cosa a

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

che non è lo stesso, ma è abbastanza buono. mi fa chiedere quale sia il tipo di rottura del tavolo che porta ios10.

SWIFT 2

Assicurati di avere questo set su true:

self.tableView.allowsSelection = true

Metti questo sopra la tua destra dopo viewDidLoad() e prima di super.viewDidLoad()

SWIFT 3

Se stai lavorando con Swift 3 in una class che non è un UITableViewController e stai utilizzando UITableViewDelegate , potresti dover usare il titolo del metodo:

 @objc(tableView:didSelectRowAtIndexPath:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){...} 

Questo ha funzionato per me, anche se ho appena migrato il mio progetto in Swift 3. È abbastanza nuovo, quindi potrebbe essere risolto in seguito.

La funzione didSelectRowAt non è stata richiamata nella mia app al primo o al secondo touch … Stavo cercando di risolvere il problema ma non ho trovato nessuna soluzione. Ma all’improvviso è stato riconosciuto, stavo usando view.animation color change … Il metodo del delegato non è stato chiamato mentre l’animazione persisteva

SWIFT 3

Nessuna delle altre risposte ha funzionato nel mio caso, quello che ha risolto per me è stato:

tableView.delaysContentTouches = false

Se hai impostato UITapGestureRecognizer nella tua class, puoi aggiungere questa riga in didSelectRowAtIndexPath:

 [tableView deselectRowAtIndexPath:indexPath animated:NO]; 

Questo ha funzionato per me.

questo problema si verifica anche quando si lavora con il riconoscimento dei gesti all’interno di una tabellaView in questo caso non è necessario rimuoverli, è necessario solo assicurarsi che la proprietà gesture cancelsTouchesInView = false questo è un valore booleano che influisce sul fatto che i tocchi siano consegnati a una vista quando viene riconosciuto un gesto.