Как установить делегат без использования segue.destinationViewController в качестве получателя метода setDelegate?

При использовании делегатов я обычно только сообщаю следующему контроллеру представления в UINavigationController, что я хочу установить себя в качестве делегата. Я делаю это в своем методе prepareForSegue:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [segue.destinationViewController setDelegate:self];
}

Это всегда отлично работало. Однако я пытаюсь сообщить viewController два индекса или два представления в navController, что я хочу установить себя в качестве делегата. Я пробовал все возможные способы определения приемника viewController, которому я хочу отправить метод setDelegate, но, похоже, ничего не работает. Вот один пример, который я пробовал:

    DateSelectViewController *dsvc = [[DateSelectViewController alloc] init];
    [dsvc setDelegate:self];

Этот метод никогда не делегируется, и я знаю, что это связано с тем, как я устанавливаю делегат, потому что я исключил все другие возможности. Как я могу сделать это правильно?


person Scott    schedule 25.04.2012    source источник


Ответы (1)


Вы не можете сделать это напрямую, потому что этот контроллер представления еще не существует. Что вы можете сделать, так это в следующем:

[segue.destinationViewController setDelegate:self.delegate];

Если у вас A -> B -> C

в A у вас будет исходный код:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [segue.destinationViewController setDelegate:self];
    // self == A
}

В B у вас будет:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [segue.destinationViewController setDelegate:self.delegate];
    // self.delegate == A
}
person hypercrypt    schedule 25.04.2012