2012-02-05 3 views
0

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

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

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

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

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

+0

Я предполагаю, что вы подклассифицируете UIPageViewController, правильно? Этот контроллер не должен быть подклассом, но немного кода будет полезен. –

ответ

0

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

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

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

+0

Это так очевидно, как только это указано. Благодаря! –

+0

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

Смежные вопросы