Как установить делегат без использования 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)


arrow_upward
3
arrow_downward

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

[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