Я не совсем уверен, как объяснить мою проблему, но я попытаюсь.
Поэтому я пытался научиться использовать делегатов и протоколы и столкнулся с проблемой. У меня есть протокол: ButtonInPopOverWasPressed с одним методом:
- (void)buttonWasPressed:(NSString *)buttonValue;
У меня также есть контроллер основного представления и настраиваемый класс popover со свойством:
@property (retain, nonatomic) id <ButtonInPopoverWasPressed> delegate;
В моем контроллере основного представления у меня есть кнопка и текстовая метка. Когда кнопка нажата, она переходит в обычное всплывающее окно. Затем я назначаю делегата segue.destinationViewController контроллером основного представления, например так:
[segue.destinationViewController setDelegate:self];
Затем, когда кнопка из всплывающего окна выбрана, она отображается в текстовой метке основного представления путем вызова метода протокола, который прослушивает основное представление:
[self.delegate buttonWasPressed:sender.currentTitle]; // sends the title of the button pressed to the delegate
Это все работает нормально. Моя проблема началась, когда я хотел, чтобы всплывающее окно переходило в разные представления при нажатии кнопки вместо отправки информации обратно в основной вид. Но когда я создал контроллер навигации в качестве всплывающего окна и установил связь со старым всплывающим окном, все сломалось.
Когда я назначаю делегата перехода (показанного выше), он выходит с другой стороны как нуль, поэтому я полностью теряю способность передавать его другим подпредставлениям и возвращать информацию обратно в основной вид. Всасывает ли навигационный контроллер делегата? Как я могу получить делегата через NC к фактическим представлениям?
Я знаю, что это основы протокола и делегата, но я огляделся и, похоже, никогда не нашел ответа, который сработал для меня.