簡體   English   中英

未調用UIPageViewController委托方法

[英]UIPageViewController delegate method not called

在我的應用程序中,我有一個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

不叫。 為什么? 有人能幫我嗎? 先感謝您。

您是否將rootViewController(您希望接收委托調用的控制器/對象)分配給UIPageViewController的委托/數據源?

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

除了上面顯而易見的解決方案,如果您遇到此問題,請考慮不保留PageViewController本身的可能性。 我今天早些時候犯了一個錯誤,它實例化了一個PageViewController,並將其視圖添加為一個subView,但沒有保留pageViewController本身。

確保通過將其添加為childViewController或將其分配給強屬性來保留它。

你是如何連接頁面視圖控制器的代理插座的? 我的猜測是你從未連接過委托鏈接。

讓頁面視圖控制器成為它自己的數據源和委托是很奇怪的。 我從來沒有試過這樣做,就像你在做的那樣,我不確定它會起作用。 我總是設置一個容器視圖控制器來管理頁面視圖控制器。 使用故事板,您只需在IB中設置容器視圖並連接嵌入segue。 然后,您將容器視圖控制器作為數據源和/或委托。

花了一些時間試圖弄清楚為什么沒有調用完成動畫。 我的代表被設置正確但事實證明,在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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM