我一直在整個週末都在爲這個問題而苦苦掙扎,並且花了很長時間用Google搜索找到沒有任何成功的解決方案。UIPageViewController無法跟蹤頁面索引
我的用例非常簡單,我無法相信讓這種平凡的行爲正常工作是多麼困難。
我的應用程序是一個簡單的分頁流程,用戶向左或向右滑動以查看下一頁或上一頁。我有一個UIPageViewController,每個頁面都包含一個UITableView。我曾試圖保持viewControllerAfterViewController和viewControllerBeforeViewController功能的原因裏面的頁面索引的跟蹤問題說明如下:PageViewController delegate functions called twice
我試過下面這個問題(跟蹤指數的內部willTransitionToViewControllers和所有建議的解決辦法didFinishAnimating)但這並不能解決我的問題,因爲viewController * ViewController函數必須返回一個viewController,並且由於它們最初被調用了兩次,第一次返回的viewController似乎是被使用的並且第二次傳遞似乎不是有任何影響。
雖然我看過很多關於這個問題的問題和博客,但我還沒有看到過一個例子,它展示瞭如何始終從viewController * ViewController函數中返回正確的viewController,並且將非常感謝一個例子。我看不到解決方案的主要問題是如何確定willTransitionToViewControllers中的下一個索引,如果我只有一個viewController,其內容在頁面加載時動態更新。這對我來說似乎是一個雞和雞蛋的問題;我需要找出更新頁面的內容,但要做到這一點,我需要知道頁面的索引(哪些是內容的一部分)。
編輯 下面是受影響的代碼的精華版本:
- (void)viewDidLoad {
[super viewDidLoad];
_pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
_pageViewController.dataSource = self;
_pageViewController.delegate = self;
[self.view addSubview:_pageViewController.view];
PageContentViewController *startingPage = [self viewControllerAtIndex:0];
NSArray *viewControllers = @[startingPage];
[_pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
// Don't do any index calculations as the result is inconsistent
return [self viewControllerAtIndex:nextIndex];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
// Don't do any index calculations as the result is inconsistent
return [self viewControllerAtIndex:nextIndex];
}
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers {
// This value never changes because the global _pageViewContentController hasn't been updated yet
nextIndex = [((PageContentViewController *)pendingViewControllers[0]) pageIndex];
}
- (PageContentViewController *)viewControllerAtIndex:(NSUInteger)index {
_pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"];
_pageContentViewController.pageIndex = index;
_pageContentViewController.title = index;
return _pageContentViewController;
}
我已經調試中,這些函數被調用,並會預計全球_pageViewContentController用正確的數據填充的順序在頁面過渡之後。
編輯2 給我一些更詳細的問題;我的每個網頁都包含一個標題和一個網頁鏈接表。單擊鏈接將打開一個WebViewController以顯示選定的網頁。通過下面的Yunus解決方案,所有內容都可以正確顯示(標題和鏈接按預期顯示),但點擊鏈接時會出現問題,因爲這會從下一頁加載鏈接。似乎頁面的渲染階段發生在數據正確的位置,但是在渲染完成後,它會用不正確的數據重新初始化頁面內容控制器,這就是爲什麼實際的鏈接數據是錯誤的(即使渲染的數據是好的)。
你能分享一些你的代碼的相關部分嗎? –
@YunusErenGuzel - 添加了代碼片段。 – bobby
你如何打開這個WebViewController?在UIPageViewController或作爲模式或等? –