2012-01-24 10 views
22

Przed scenorysami udało mi się ustawić delegatów i źródła danych po prostu przeciągając gniazdko do klasy. W przypadku scenorysów nie mogę przeciągnąć wylotu do innego kontrolera widoku; nie ma miejsca docelowego, który na nie zareaguje.Storyboard - ustawienie delegatów

Po kliknięciu obiektu kontrolera widoku, jestem w stanie zobaczyć właściciela klasy na dole, ale gdy tylko wybiorę drugi kontroler widoku zawierający gniazdo, stary wybór zniknie, więc nie mogę połączyć dwa.

Czy Apple twierdzi, że powinniśmy je programować?

Odpowiedz

27

Prawidłowo. Ustaw delegata lub inne dane w metodzie prepareForSegue:sender:. Oto przykład:

- (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

Jak o ustawieniu delegata na UISplitViewController? Przykładowy kod, którego szukam, obsługuje go, przechodząc do kontrolera widoku głównego okna: 'UISplitViewController * splitViewController = (UISplitViewController *) self.window.rootViewController;' Chociaż technicznie poprawny i działa, wygląda na to, że naprawdę brudne podejście w porównaniu do ładnej drogi delegatów i widoków kontrolerów zostały ustawione przed storyboardami ... –

0

Jeśli Twoje miejsce docelowe odsunięcia storyboardu View Controller jest kontrolerem UIViewController, to odpowiedź @Marco jest właściwa. Ale jeśli cel View Controller jest UINavigationViewController następnie trzeba uzyskać UIViewController z 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; 
    } 
}