Использование делегата с tabBarController на раскадровке - PullRequest
0 голосов
/ 02 апреля 2012

Буду признателен за любой совет, когда я попытаюсь обернуть голову вокруг этого - я не уверен, что я реализую это неправильно, или я работаю из неправильной предпосылки (или и того, и другого).

Если у меня есть класс, в котором я создал протокол (делегатОР) - чтобы назначить делегата для этого протокола, могу ли я сказать, что мне нужно выделить / инициализировать класс «делегата» где-то в файл реализации делегатора, а затем назначить его делегатом делегата?

Если это так, ответьте на вопрос: у меня настроен tabBarController в раскадровке, и когда пользователь нажимает на вкладку «конец», я хотел бы отправить сообщение в viewController для представления, которое они собираются покинуть. , так что всплывает предупреждение, говорящее что-то вроде «ты уверен?». Поскольку раскадровка выполняет инициализацию и распределение за кулисами, я не знаю, как настроить делегата. В другой публикации я читал об использовании метода prepareForSegue при переходе между двумя viewController для установки делегата, но не могу выработать аналогичную методику перехвата и установки для tabBarController.

1 Ответ

0 голосов
/ 02 апреля 2012

Если у меня есть класс, в котором я создал протокол (делегатОР) - чтобы назначить делегата для этого протокола, могу ли я сказать, что мне нужно выделить / инициализировать класс «делегата»где-нибудь в файле реализации делегата, а затем назначить его делегатом делегата?

Нет.Обычно он работает так, что какой-то другой класс, обычно какой-то контроллер, будет создавать (например, alloc / init) экземпляр объекта, а также его делегата и устанавливать его делегат.

Например, если выимеют UITableView и UITableViewDelegate, обычно у вас есть какой-то контроллер представления, который владеет UITableView, а также владеет UITableViewDelegate (часто сам контроллер представления является делегатом).Задача контроллера представления - установить делегата табличного представления.Совершенно очевидно, что UITableView не является задачей создания и установки его делегата.

Тем не менее, вы правы, что при использовании раскадровки установка делегатов для контроллеров представления может быть сложной.Если метод prepareForSegue: не работает для вас, я предполагаю, что это потому, что контроллер панели вкладок является вашим корневым контроллером представления (как и должно быть, согласно HIG).Поскольку ваш делегат приложения будет иметь свойство window, вы сможете получить доступ к корневому контроллеру представления из него:

UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;
tabController.selectedIndex = [defaults integerForKey:kOptionLastTabSelectedKey];
tabController.delegate = self;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...