在我的应用程序中,我有一个 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
未被调用。 为什么?有人能帮我吗?提前谢谢。
答案 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)