2013-03-07 11 views
5

mi sono imbattuto in uno strano bug nel mio app:.UITableView spinta segue attivato più volte

Il setup

Un semplice master-detail app, stile iPhone (cioè senza vista divisa, non popover, solo un controller di navigazione, un controller di visualizzazione tabella e un controller di visualizzazione).

enter image description here

Il bug

  1. Toccare un "background" parte della vista tabella (le parti in grigio più scure sul mio screenshot) come un'intestazione di sezione o piè di pagina.
  2. Mentre si tiene il dito sullo schermo, toccare una cella più volte.
  3. Rilasciare tutte le dita. La vista volontà "dettaglio" spinto normalmente, ma quando si tocca il pulsante indietro, vi accorgerete che la vista di dettaglio è stato accatastato tutte le volte che hai toccato la cella al punto 2.

enter image description here

Puoi anche toccare più celle al punto 2 e il loro parere destinazione saranno impilate nell'ordine corretto :)

riprodurlo

ero in grado di riprodurre il bug con un, applicazione pulita appena creata, e il t l'ultima versione dell'app Twitter per iPhone (toccando l'etichetta "Loading" con il dito 1 e toccando un tweet più volte).

Tuttavia, non è stato possibile attivare lo stesso comportamento nell'app Impostazioni, nella scheda "Generale" (che è una vista tabella raggruppata).

Il bug è stato riprodotto su iOS 6.0 e 6.1. Non ho dispositivi con versioni precedenti da testare.

Domanda

È questo un trucco noto per la creazione di navigazione/apps basate vista tabella e se è così c'è una soluzione per impedire questo comportamento (strano)? O è un bug iOS (e se sì, è già noto da Apple)?

+0

Non riesco a riprodurre questo errore nella mia applicazione - non appena viene selezionata una cella, viene eseguito un passaggio: NON POSSO selezionare più celle come fai tu - quindi potrebbe essere correlato al modo specifico in cui la tua applicazione (o altri) gestire la spinta successiva. Una domanda: perché hai 3 segui sul tuo storyboard tra il tuo tavolo e il seguente viewController? Uno dovrebbe essere sufficiente – Vinzzz

+0

Questo era solo per consentire il test del seguito su più celle. La vista tabella contiene celle statiche e ho creato un seguito per ogni cella. La mia app "reale" utilizza tuttavia celle dinamiche, con solo un seguito (creato con Ctrl + trascina sul controller successivo, piuttosto classico). Ho appena aggiunto alla domanda che ho testato solo su iOS 6.x. Stai provando su una versione precedente? –

+0

E si ha questo errore anche quando si imposta questo segue come uno 'personalizzato', e facendo le cose a livello di codice: chiamando 'performSegueWithIdentifier' dal proprio delegato della tabella' didSelectCellAtIndexPath: '? Questo è il modo in cui lo gestisco, non posso selezionare più celle (iOS 6) – Vinzzz

risposta

0

Questa è fissato da Apple in iOS 7.

Per le versioni precedenti del sistema operativo, Dan F's answer dovrebbe fare il trucco.

3

Una possibile misura tampone si potrebbe usare è quello di implementare

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

E utilizzare un flag booleano o qualcosa per indicare che si sta tentando di eseguire tale segue. es:

BOOL doingSegue = NO; 

-(void) viewWillAppear 
{ 

    doingSegue = NO; 
} 

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
{ 

    if ([identifier isEqualToString:@"MySegueIdentifier"]) 
    { 
     if (doingSegue) 
     { 
      return NO; 
     } 
     else 
     { 
      doingSegue = YES; 
      return YES; 
     } 
    } 
    return YES; 
} 

Swift versione

var doingSegue = false 

override func viewWillAppear(_ animated: Bool) { 
    doingSegue = false 
} 

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { 
    if identifier == "MySegueIdentifier" { 
     if doingSegue { 
      return false 
     } 
     else { 
      doingSegue = true 
      return true 
     } 
    } 
    return true 
} 
Problemi correlati