Раскадровка - настройка делегатов - PullRequest
22 голосов
/ 24 января 2012

До раскадровки я мог устанавливать делегатов и источники данных, просто перетаскивая розетки в класс. С раскадровками я не могу перетащить розетку в другой контроллер представления; нет пункта назначения, который будет отвечать на него.

Если я щелкну на объекте контроллера представления, я смогу увидеть владельца класса внизу, но как только я выберу другой контроллер представления, содержащий розетку, старый выбор исчезнет, ​​поэтому я не могу соединить два .

Является ли этот способ Apple сказать, что мы должны подключать их только программно?

Ответы [ 2 ]

28 голосов
/ 25 января 2012

Правильно.Установите делегат или другие данные в вашем методе prepareForSegue:sender:.Вот пример:

- (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;
    }
}
0 голосов
/ 24 августа 2016

Если в качестве конечного пункта назначения раскадровки View Controller используется UIViewController, то ответ @Marco верен.Но если вашим целевым контроллером представления является UINavigationViewController, то вы должны получить UIViewController из 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;
    }
}
...