Доступ к методам PageViewController из дочернего контроллера представления - PullRequest
0 голосов
/ 05 февраля 2012

Проблема заключается в следующем. У меня есть PageViewController в качестве моего корневого контроллера представления. Инициализация первой страницы с использованием SetViewControllers в блоке ViewDidLoad класса PageViewController работает так же, как и перелистывание страниц вперед и назад с использованием распознавателей жестов страницы. Этот контроллер корневого представления доступен для всего приложения через AppDelegate.

Я хотел добавить возможность возврата на первую страницу из любой точки книги, поэтому создал в своем классе PageViewController открытый метод, который просто вызывал метод SetViewControllers. Хотя это, кажется, работает, я заметил некоторые причуды. Музыка, которая зацикливается в фоновом режиме (опять же, объект AVAudio, объявленный в AppDelegate), перезапускается, и блок ViewDidLoad не запускается, пока страница не будет перевернута снова с использованием распознавателей жестов.

Я пытался сделать то же самое, используя GetNextViewController, но это просто вызывает исключение нулевой ссылки для ссылки PageViewController. Я предполагаю, что есть какие-то отношения между элементами управления, которые я не понимаю, возможно, это связано с источником данных PageViewController. Я попытался делегировать это классу, который переопределяет методы по умолчанию, а также использовать синтаксис Mono this.pageViewController.GetNextViewController = делегат (подпись метода) безрезультатно.

Кто-нибудь знает, в чем заключается моя проблема?

Редактировать: код для AppDelegate.cs можно посмотреть здесь: https://gist.github.com/1747537 и для PageViewController.cs здесь: https://gist.github.com/1747559.

1 Ответ

0 голосов
/ 06 февраля 2012

Я вижу несколько проблем в вашем коде:

  • ваш PageViewController уже является корневым контроллером в вашем приложении, вам не нужно никуда звонить AddSubview().
  • Вы наследуете от UIViewController, а затем инкапсулируете UIPageViewController. Вы должны либо наследовать от UIPageViewController, либо вообще не иметь наследования (если это правда, поскольку Дмитрий говорит, что UIPageViewController не предназначен для подклассов) .
  • ReturnToFrontPage() может быть методом вашего AppDelegate вместо вашего подкласса UIPageViewController.
  • С вашей комбинацией наследования и инкапсуляции вы создаете иерархию контроллеров представления. Это создаст проблемы с событиями, запускаемыми, если они не реализованы должным образом.

Короче говоря: не наследуйте ничего в вашем случае. Используйте простой UIPageViewController и сделайте ReturnTpFrontPage() метод вашего AppDelegate, тогда все должно быть прогулкой в ​​парке.

...