2011-11-24 12 views
6

Mi chiedevo come utilizzare correttamente lo storyboard per montare un controller di visualizzazione in modo modale. Personalmente preferisco lavorare con xibs, ma sembra che lo storyboard stia guadagnando popolarità e sarà la strada da percorrere in futuro.Come utilizzare correttamente il controller di visualizzazione modale con lo storyboard xcode 4.2

Il modo in cui normalmente impostare un controller di visualizzazione in modo modale sarebbe come questo: diciamo che abbiamo ViewControllerA (A in breve) e ViewControllerB (B in breve). Normalmente inserirò un protocollo in B.h specificando il metodo delegato quando B vuole essere ignorato e aggiungere il campo id<theProtocol> delegate come proprietà assign. Supponendo che io sono impegnato in A e voglio presentare B modale, avrei scritto:

B* b = [[B alloc] initWithNibName:@"B" bundle:nil]; 
b.delegate = self; 
[self presentModalViewController:B animated:YES]; 

Utilizzando lo storyboard, lo so che è possibile mettere su un controller di vista diverso in un modo modale ctrl-trascinamento da un pulsante per un viewcontroller e selezionando modale come tipo di transizione. Mi sto solo chiedendo; dove posso impostare il delegato del nuovo controller di visualizzazione? Qual è la pratica corretta di passare le cose al tuo controller di visualizzazione modale? Io non so davvero che cosa l'intero affare con Segues è ...

risposta

5

Date un'occhiata a thistutorial

In base ad esso, è necessario impostare il delegato come segue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"AddPlayer"]) 
    { 
     UINavigationController *navigationController = 
      segue.destinationViewController; 
     PlayerDetailsViewController 
      *playerDetailsViewController = 
      [[navigationController viewControllers] 
       objectAtIndex:0]; 
     playerDetailsViewController.delegate = self; 
    } 
} 

Dove @ "AddPlayer" è il nome del tuo 'modal' segue

+1

Ho guardato il tutorial e ovviamente non ho alcun beneficio nel dubitare della tua risposta, ma non sei d'accordo che questo è un codice molto più brutto del precedente? Sembra proprio una tale seccatura fare qualcosa che è stato davvero facile prima ... – Warkst

+1

Non usare gli storyboard se sembra brutto per te –

+1

Questa è la ragione principale per cui non li uso adesso, sono solo "spaventato" diventeranno il modo principale per farlo in futuro. – Warkst

0

Invece di utilizzare il controller di navigazione, è possibile utilizzare direttamente l'oggetto UIStoryboardSegue passato in prepareForSegue. Ha una proprietà chiamata destinationViewController che è il controller della vista che viene istanziato. Trovo che molto più pulito. Questo è un esempio.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"AddPlayer"]) 
    { 
     PlayerDetailsViewController 
      *playerDetailsViewController = 
      (PlayerDetailsViewController *) segue.destinationViewController; 

     playerDetailsViewController.delegate = self; 
    } 
} 

IMO Penso che gli storyboard siano grandi perché funzionano come un modello della vostra applicazione. Inoltre non mi sono mai piaciuti i pennini. = D

+0

Oh aspetta. La risposta precedente lo ha fatto, ma hanno assegnato il controller della vista di destinazione a un controller della vista di navigazione che non devi fare (non so nemmeno se funziona ...). –

Problemi correlati