Метод делегата UipageViewController не вызывается
-
23-12-2019 - |
Вопрос
В моем приложении у меня есть rootviewcontroller (uipageviewcontroller), firstcontroller (uiviewcontroller) и второйконтроллер (uiviewcontrolller).
Две виды внутри двух
в моем RootViewController.h:
@interface RootController : UIPageViewController <UIPageViewControllerDataSource, UIPageViewControllerDelegate>
.
Но когда я прокручиваю между разными представлениями, такие методы, как:
-(void) pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
.
не вызываются. Почему?Кто-нибудь может мне помочь?Заранее спасибо.
Решение
Вы назначали rootviewcontroller (какой бы контроллер / объект вы хотите получить вызовы делегатов), чтобы быть делегатом / DataSource of uipageViewController?
pageViewController.delegate = rootViewController;
pageViewController.dataSource = rootViewController;
. Другие советы
В дополнение к очевидному решению выше, если вы столкнулись с этой проблемой, пожалуйста, рассмотрите возможность того, что сама страницаViewController не сохраняется.Ранее я допустил ошибку в более раннем этапе создания страницы PageViewController и добавляя его представление в виде подсчета, но не удерживая самого PageViewController.
Обязательно сохранить его либо, добавив его как ChildViewController или присвоение его к сильной собственности.
Как вы подключали страницу просмотреть выпуск делегата контроллера?Я думаю, что вы никогда не подключали ссылку делегата.
Странно иметь контроллер просмотра страницы - это собственный источник данных и делегат.Я никогда не пытался сделать это, как вы делаете, и не уверен, что это будет работать.Я всегда устанавливаю контроллер просмотра контейнера, который управляет контроллером просмотра страницы.С раскатками вы просто настроили вид контейнера в IB и подключите встроенную систему.Затем вы сделаете контроллер просмотра контейнера источником данных и / или делегата.
Просто провел некоторое время, пытаясь выяснить, почему дидфинишанимация не было вызвано.Мои делегаты были установлены правильно, но оказывается, что в Swift 3 функция идет такая:
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)
.
Уменьшить выше подчеркивание.Функция ниже не будет вызвана.
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)
.