2012-01-24 5 views
22

Prima degli storyboard, ero in grado di impostare i delegati e le origini dati semplicemente trascinando un punto vendita in una classe. Con gli storyboard, non posso trascinare l'uscita su un altro controller di visualizzazione; non c'è una destinazione che risponda ad essa.Storyboard - impostazione dei delegati

Se faccio clic su un oggetto controller vista, sono in grado di vedere il proprietario della classe in fondo, ma non appena seleziono l'altro controller di visualizzazione contenente la presa, la vecchia selezione è scomparsa, quindi non riesco a connettere Due.

È questo il modo di Apple di dire che dovremmo collegarli solo programmaticamente?

risposta

27

Corretto. Impostare il delegato o altri dati nel metodo prepareForSegue:sender:. Ecco un esempio:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Check the segue identifier 
    if ([segue.identifier isEqualToString:@"showDetail"]) 
    { 
     // Get a reference to your custom view controller 
     CustomViewController *customViewController = segue.destinationViewController; 

     // Set your custom view controller's delegate 
     customViewController.delegate = self; 
    } 
} 
+3

Come sull'impostazione il delegato per un UISplitViewController? Il codice di esempio che sto osservando lo gestisce andando al controller della vista radice della finestra in questo modo: 'UISplitViewController * splitViewController = (UISplitViewController *) self.window.rootViewController;' Sebbene tecnicamente corretto, e funziona, sembra davvero un approccio sporco rispetto al modo in cui i delegati e i controller di visualizzazione erano impostati prima degli storyboard ... –

0

Se lo storyboard segue destinazione View Controller è un UIViewController, quindi la risposta di @Marco è corretta. Ma se la vostra destinazione View Controller è un UINavigationViewController allora dovete ottenere l'UIViewController da UINavigationViewController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Check the segue identifier 
    if ([segue.identifier isEqualToString:@"chooseCategoryType"]) 
    { 
     // Get a reference of your custom view controller if your segue connection is an UIViewController 
     // CustomViewController *customViewController = segue.destinationViewController; 
     // Get a reference of your custom view controller from navigation view controller if your segue connection is an UINavigationViewController 
     CustomViewController *customViewController = [[[segue destinationViewController] viewControllers] objectAtIndex:0]; 

     // Set your custom view controller's delegate 
     customViewController.delegate = self; 
    } 
}