Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: ScottОтветов: 1

При использовании делегатов я обычно только сообщаю следующему контроллеру представления в 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];

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

iosobjective-cdelegatesprotocols

Ответы

Ответ 1 · рейтинг 3 · hypercrypt

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

[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
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы