SplitView в раскадровке, не может подключить делегат - PullRequest
9 голосов
/ 23 января 2012

У меня есть интерфейс iPad, определенный в раскадровке, с SplitViewController. Я хочу, чтобы делегат SplitViewController указывал на подробный контроллер, но IB не разрешит установить это соединение.

  • Помещение объекта "object" и изменение класса на класс моего контроллера подробностей заставляет делегата указывать на экземпляр экземпляра подробности, отличный от отображаемого.
  • Мои попытки подключить его вручную (в didFinishLaunching) в делегате приложения были безрезультатны, делегат был по-прежнему нулевым.
  • Смена делегата на AppDelegate и реализация там протокола работала, но передача сообщений в детальный контроллер не работала (хотя я убедился, что ссылаюсь на тот же экземпляр).

Ничего не работает. Я могу установить self.splitViewController.delegate = self, когда загружается подробный вид, и тогда он становится делегатом без проблем. Но я пропускаю любые звонки делегатов, которые происходят до этого момента.

Для контекста мне нужно получить вызовы делегата splitviewcontroller, чтобы я мог показать кнопку в подробном представлении для отображения всплывающего окна, как это принято в обычной практике. Прямо сейчас, если приложение запускается в портретной ориентации, его нужно повернуть в альбомную ориентацию, а затем назад для отображения кнопки.

Я сделал это с "нормальными" сгибами без проблем. Кажется, это особый случай более общей проблемы, заключающейся в том, что не разрешается соединять розетки между сценами в раскадровке.

1 Ответ

9 голосов
/ 23 января 2012

Понятия не имею, почему это сработало на этот раз, а не первые 80 раз, но я добавил это в свой AppDelegate:

UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
...