2015-04-20 44 views
11

presentationIndexForPageViewController:返回值的文件說:我應該在presentationIndexForPageViewController中返回:對於我的UIPageViewControllerDataSource?

返回所選項目的索引頁面中的指標來反映。

但是,這是模糊的。它會調用這個方法,並期望正確的索引作爲用戶滾動瀏覽頁面視圖控制器嗎?

此外,關於何時 pageViewController:viewControllerBeforeViewController:pageViewController:viewControllerAfterViewController:沒有保證。該文檔剛剛提到:

[An] object [提供]視圖控制器在頁面視圖控制器上根據需要,以響應導航手勢。

事實上,在某些情況下,我看到緩存發生了。例如,它看起來像一個視圖控制器將只會被取消分配,如果你從它向前導航兩頁。否則,它希望將其保存在緩存中,以防用戶在頁面視圖控制器中倒退。

這是否意味着我需要一個一致的方式來通過註冊UIPageViewControllerDelegate然後constantly updating this value來知道當前顯示哪個頁面?

回答

9

關於 presentationCountForPageViewController:presentationIndexForPageViewController:,文檔狀態:setViewControllers:direction:animated:completion:方法被調用後

這些方法都被調用。在手勢驅動導航之後,這些方法不會被調用。索引自動更新,並且視圖控制器的數量預計保持不變。

因此,看起來我們只需要在調用setViewControllers:direction:animated:completion:後立即返回一個有效值。

每當我實現數據源,創建一個輔助方法,showViewControllerAtIndex:animated:,並保持價值的軌道屬性presentationPageIndex返回:

@property (nonatomic, assign) NSInteger presentationPageIndex; 
@property (nonatomic, strong) NSArray *viewControllers; // customize this as needed 

// ... 

- (void)showViewControllerAtIndex:(NSUInteger)index animated:(BOOL)animated { 
    self.presentationPageIndex = index; 
    [self.pageViewController setViewControllers:@[self.viewControllers[index]] direction:UIPageViewControllerNavigationDirectionForward animated:animated completion:nil]; 
} 

#pragma mark - UIPageViewControllerDataSource 

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController { 
    return self.presentationPageIndex; 
} 

然後,您可以使用此方法以顯示正確的觀點控制器並使所選索引顯示正確的值:

​​
相關問題