2013-01-21 5 views
6

Ho trascinato una vista Contenitore su uno dei miei controller di visualizzazione. Questo viene fornito con un segmento di incorporamento. Esecuzione produce questo:Segue di incorporamento - iOS 5

'Could not instantiate class named UIStoryboardEmbedSegueTemplate' 

Quindi, da un paio di altre domande StackOverflow sembra che questo non è implementata in iOS 5. Tuttavia, le domande non suggeriscono la correzione. XCode non mi permetterà di usare nessun altro tipo di seguito.

Se la risposta è creare una vista contenitore personalizzata, ci vado. Ho visto un sacco di codice per quello negli ultimi due giorni. Mi chiedevo solo se ci fosse un modo per farlo usando l'oggetto Container View fornito.

risposta

9

Il problema è che Incorpora segue è iOS 6+. Fallisce perché stai cercando di istanziare la classe interna di EmbedSegue che non esiste in iOS 5. La soluzione ovvia è non usare EmbedSegue se hai bisogno del supporto per iOS 5 :)

Ecco un'altra domanda: che cosa usare invece? Sto avendo lo stesso problema al momento; Condividerò se trovo qualsiasi soluzione di architettura elegante per quello.


sembra che la soluzione sia abbastanza ovvia per qualsiasi sviluppatore iOS "vecchia scuola". Ecco come lo fai.

  1. Nel suo "figlio" View Controller "genitore" View Controller instantiate in viewDidLoad: o ogni volta adatto
  2. [auto addChildViewController: childVC];
  3. [self.view addSubview: childVC.view];
  4. childVC.view.frame = ....;

Ora dovresti vedere la vista che hai fatto per tuo figlio VC in nib o lo storyboard verrà visualizzato nella vista genitore dove lo specifichi.

Speriamo che questo vi aiuterà ogni anima che cerca di separare la loro logica :)

Cheers, Dan

+0

appena aggiunto alternativa EmbedSegue per iOS <6 –

+0

Forse una domanda stupida, ma si può compilare passo # 4 ? Assegnate self.view.frame ad esso? – canhazbits

+0

Direi che dipende dal tuo caso. Se desideri che la visualizzazione figlio abbia tutto lo spazio disponibile sulla sua vista genitore, probabilmente vorrai usare childVC.view.frame = parentView.bounds; In questo caso, la vista genitore potrebbe essere self.view o una vista segnaposto. I segnaposto sono davvero utili quando si allinea un segnaposto in IB e nel codice si collega solo childVC.view alla vista segnaposto senza dover calcolare manualmente l'origine e le dimensioni della vista figlio. Se preferisci, puoi comunque andare con childVC.view.frame = CGRectMake (...); e specificare la dimensione e l'origine manualmente. Aiuta il tuo caso? –