Раскадровка — настройка делегатов

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

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

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


person Morrowless    schedule 24.01.2012    source источник


Ответы (2)


Верный. Установите делегата или другие данные в методе 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;
    }
}
person Marco    schedule 25.01.2012
comment
Как насчет установки делегата для UISplitViewController? Пример кода, на который я смотрю, обрабатывает это, обращаясь к корневому контроллеру представления окна следующим образом: UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; Хотя технически это правильно и работает, это кажется действительно грязным подходом по сравнению с хорошим способом, которым делегаты и контроллеры представления были установлены до раскадровки. ... - person Dan F; 03.05.2012

Если ваш контроллер представления для перехода к раскадровке является UIViewController, тогда ответ @Marco правильный. Но если ваш конечный View Controller является 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;
    }
}
person kazi.munshimun    schedule 24.08.2016