2012-04-05 11 views
5
... 
    SecondViewController *svc = [SecondViewController new]; 
    [self presentViewController:svc animated:YES completion:NULL]; 
} 

Questo codice è esattamente lo stesso di quello che ho usato in un altro app, ma qui sto usando presentViewController piuttosto che presentModalViewController
(completion:NULL li rende efficacemente identici Same. risultato, almeno.)presentViewController - vista solido nero, metodi viewDid___ non chiamati

Entrambi i tentativi di creazione di una vista modale sono strutturati nello stesso modo. Quelle linee nella vista principale, un controller di visualizzazione nello Storyboard e corrispondenti ai file .h e .m. L'unica differenza è che qui voglio un trigger programmatico, quindi è impossibile trascinare un seguito e farlo con esso.
Ho un oggetto impostato per riconoscere un gesto e chiamare il metodo di transizione. Questo è probabilmente ciò che sta causando il problema (almeno in parte), ma è necessario.

L'utilizzo di un UIButton sarebbe un imbroglio. Nessuna scadenza, nessuna scorciatoia.

MODIFICA: L'output NSLog mostra qualcosa di strano.

2012-04-05 10:41:12.047 MyApp[5962:707] <SecondViewController: 0x1d8c130>
2012-04-05 10:41:12.479 MyApp[5962:707] <SecondViewController: 0x1d8e360>

Così sto facendo qualcosa di stupido ancora una volta che succede ad avere una soluzione semplice, giusto?
Modifica di nuovo: presentViewController… veniva chiamato più volte. Aggiustato. Ancora nero, però.


Torna performSegueWithIdentifier:sender: al posto del molto più facile presentViewController:animated:completion:

di terminazione app a causa di eccezione non identificata 'NSInvalidArgumentException", la ragione: 'Ricevitore ... non ha l'segue con identificatore ...'

ho detto che a esegui un seguito, ma non ce n'è uno nello storyboard (I non è possibile aggiungere, non c'è alcuna sezione Storyboard Segues in 'Inspector Connections' per l'oggetto che sto tentando di utilizzare), quindi si blocca. è un comportamento normale

Quello che voglio è avere una vista modale senza che necessitano di creare un seguito. L'ho fatto, quindi so che è possibile.
Tutto ciò di cui ho bisogno è un po 'di aiuto per farlo funzionare.

.

performSegueWithIdentifier:@"Identifier" sender:nilNSSInvalidArgumentException
presentViewController:viewController animated:YES completion:NULLvuoto

risposta

12

Fatto.

sostituire le linee in questione con questo:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" 
                bundle:nil]; 
SecondViewController *viewController = 
      [storyboard instantiateViewControllerWithIdentifier:@"SecondView"]; 
[self presentViewController:svc animated:YES completion:NULL]; 

Credito per questa soluzione va a sé risposto alla domanda di IturPablo:
TabBarController, overwriting shouldSelectViewController to do a segue

+0

hey bro, buona risposta, sei un bro rockstar! Ama quella merda! grazie per l'aiuto – iProRage

1

Siete alla ricerca di performSegueWithIdentifier:sender:? La documentazione sembrano corrispondere descrizione:

"è possibile chiamare questo metodo per innescare un segue a livello di codice, forse in risposta a qualche azione che non può essere specificato nel storyboard file di risorsa"

+0

che non funzionava affatto (errore era qualcosa su il ricevitore non ha un identificatore di follow), quindi ho pensato di ricorrere alla più semplice vista modale presente/disattiva. – Thromordyn

+0

Questo errore ** di solito ** mi viene in mente se mi capita di connettere l'inizio dei passaggi nello storyboard a un controller che non è quello su cui chiamo il metodo. –

+0

Mi sono assicurato che tutti i nomi delle viste/identificatori/ecc. Fossero corretti. Anche se fossi riuscito a farlo funzionare, avrebbe comunque richiesto di rielaborare l'interfaccia per adattarla a un altro pulsante. (Questa vista (che in realtà non si chiama "Secondo") non è stata pianificata, quindi non c'è molto spazio per un altro oggetto.) – Thromordyn

Problemi correlati