2013-11-27 17 views
7

Ho una vista tabella con diversi tipi di celle di visualizzazione tabella. In una delle celle, ci sono due pulsanti, che caricano un controller di visualizzazione quando viene premuto. Sto usando la seguente funzione per gestire la pressione del pulsante:Seguito iOS eseguito due volte

- (IBAction)leftButtonPressed:(id)sender 
{ 
    // Getting the pressed button 
    UIButton *button = (UIButton*)sender; 
    // Getting the indexpath 
    NSIndexPath *indPath = [NSIndexPath indexPathForRow:button.tag inSection:0]; 
    // Loading the proper data from my datasource 
    NSArray *clickedEvent = [[[SOEventManager sharedEventManager] eventsArray] objectAtIndex:indPath.row]; 
    [[SOEventManager sharedEventManager] setSelectedEvent:clickedEvent[0]]; 
    // Everything working as it should up to this point 
    // Performing seque... 
    [self performSegueWithIdentifier:@"buttonSegue" sender:self]; 
} 

Il mio buttonSegue dovrebbe premere un nuovo controller di visualizzazione. In qualche modo invece di spingere una volta, sembra essere spingere due volte, quindi ottengo il seguente avviso:

2013-11-27 01:48:30.894 Self-Ordering App[2081:70b] nested push animation can result in corrupted navigation bar 
2013-11-27 01:48:31.570 Self-Ordering App[2081:70b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 

Nel mio caso si porta ad un crash, poiché non v'è un evento in cui voglio l'applicazione per pop subito il controller della vista in modo che torni alla mia vista tabella. Io uso un alertview per questo e gestire l'evento con il seguente:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex]; 
    // ... 
    // Additional checking of button titles.... 
    else if ([buttonTitle isEqualToString:NSLocalizedString(@"Vissza", nil)]) 
    { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 

Potrebbe me interessante notare che ho un altro segue dal mio "regolare" cella di vista tabella, e in quel caso io uso il prepareForSegue : metodo

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"detailSegue"]) 
    { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     SOEvent *selectedEvent = [[[SOEventManager sharedEventManager] eventsArray] objectAtIndex:indexPath.row]; 
     [[SOEventManager sharedEventManager] setSelectedEvent:selectedEvent]; 
    } 
} 

In questo caso, il controller della vista viene premuto perfettamente e viene anche saltato immediatamente se necessario. Sto testando questo su iOS7 e Xcode 5. Non ho riscontrato un problema come questo prima, qualsiasi aiuto sarebbe molto apprezzato.

+5

Sei sicuro di aver cablato correttamente le azioni nel builder dell'interfaccia? forse hai cablato l'evento per, ad esempio, sia ritocco interno che tocco interno invece di ritoccare semplicemente all'interno. o forse hai anche assegnato il seguito da entrambi i codici e di nuovo nel generatore di interfacce. li hai controllati? è un errore comune –

+0

Oh dannazione .. In effetti hai ragione, assegno i miei pulsanti anche nei metodi di visualizzazione delle origini dati della tabella .. Grazie per la tua risposta! –

risposta

16

Risposta da può poyrazoğlu:

sei sicuro di aver cablato le azioni correttamente l'interfaccia costruttore? forse hai collegato l'evento per, ad esempio, entrambi ritoccati all'interno dello e ritoccati all'interno invece di ritoccare semplicemente all'interno. o forse hai anche assegnato il seguito da entrambi i codici e di nuovo nel generatore di interfaccia. li hai controllati? è un errore comune -

Stavo assegnando il ritocco all'interno delle azioni per ciascun pulsante sia dello storyboard che dei metodi di origine dati della mia tableview.

Grazie per il vostro aiuto rapido can poyrazoğlu !!

+0

oh, non pensavo davvero alla vista del tavolo, ma sono contento di vederlo aiutato. siete i benvenuti :) –

+0

Stavo caricando anche il nuovo controller di visualizzazione 2x. Ho collegato il seguito dal controller della vista invece della cella tableview e questo ha risolto il problema. – JeffK

12

Forse vuoi collegare i tuoi follower con View Controller invece di UIButtons!

Probabilmente si dovrebbe avere i segues cablato con qualche pulsante mi piace questo: enter image description here

Ma è necessario collegarli con i controller di vista, invece: enter image description here

+0

Questo ha funzionato per me! (Swift 4, Xcode 9). Non so perché questo non è più enfatizzato! Usando un delegato, se il seguito era cablato tra un pulsante (in una cella di tabella), veniva sempre attivato e il mio delegato veniva eseguito in seguito. Collegato alla visualizzazione cella, ciò non accade, quindi la mia chiamata manuale per eseguire il follow funziona come pianificato. – DavidG

1

ho sempre ottenere questo problema quando ho i miei pulsanti sono collegati direttamente al controller della vista di destinazione. Devi assicurarti di cancellare prima i vecchi passaggi che hai fatto, quindi fare clic sul controller della vista attuale (da dove vieni) e CTRL + fare clic sul controller di destinazione.

Questo dovrebbe risolvere il problema :)

5

Per Swift 3, Xcode, e ios 9+, che è quello che sto usando: Assicurarsi che si sta disegnando segue dal tuo UIViewControllers e non pulsanti o altre interfacce.

Ho avuto lo stesso problema, e semplicemente cambiando l'inizio del seguito dall'UIController invece del pulsante rimosso questo errore.

Problemi correlati