未调用UIPageViewController委托方法

时间:2014-02-27 11:42:46

标签: ios objective-c xcode uiviewcontroller uipageviewcontroller

在我的应用程序中,我有一个 RootViewController(UIPageViewController),一个FirstController(UIViewController)和一个SecondController(UIViewController)。 两个 UIViewControllers中的两个视图滚动RootViewController

在我的RootViewController.h中:

@interface RootController : UIPageViewController <UIPageViewControllerDataSource, UIPageViewControllerDelegate>

但是当我在不同的视图之间滚动时,委托方法如:

-(void) pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed

未被调用。 为什么?有人能帮我吗?提前谢谢。

4 个答案:

答案 0 :(得分:24)

您是否将rootViewController(您希望接收委托调用的控制器/对象)分配为UIPageViewController的委托/数据源?

pageViewController.delegate = rootViewController;
pageViewController.dataSource = rootViewController;

答案 1 :(得分:12)

除了上面显而易见的解决方案之外,如果您遇到此问题,请考虑不保留PageViewController本身的可能性。我今天早些时候犯了一个错误,它实例化了一个PageViewController并将其视图添加为一个subView但没有保留pageViewController本身。

确保通过将其添加为childViewController或将其分配给强大的属性来保留它。

答案 2 :(得分:1)

您是如何连接页面视图控制器的代理插座的?我的猜测是你从未连接过代理链接。

让页面视图控制器成为它自己的数据源和委托是很奇怪的。我从来没有试过这样做,就像你在做的那样,我不确定它会起作用。我总是设置一个容器视图控制器来管理页面视图控制器。使用故事板,您只需在IB中设置容器视图并连接嵌入segue。然后,您将使容器视图控制器成为数据源和/或委托。

答案 3 :(得分:0)

花了一些时间试图弄清楚为什么没有调用完成动画。我的代表被设置正确但事实证明,在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)