2012-08-13 28 views
2

我有一個UIPageViewController和一個符合UIPageViewControllerDataSource的類,並管理UIPageViewController顯示的UIViewControllers。當翻頁由用戶發起時,它運行良好。但是現在我想以編程的方式來做到這一點。當使用UIPageViewControllerDataSource時,在UIPageViewController中以編程方式打開頁面?

我發現,這裏存在對所以有一個非常類似的問題,回答了問題的ViewControllers的靜態量:Is it possible to Turn page programmatically in UIPageViewController?

但我無法適應的答案,使用UIPageViewControllerDataSource的。我在想,一定有這樣的:

- (void)setCurrentViewController:(UIViewController *)viewController 

我想我只是俯瞰東西在這裏。

回答

9

答案中提到的方法(setViewControllers:direction:animated:completion:)設置當前視圖控制器,正是你所需要的。 使用第一個參數定義視圖控制器,您想要顯示。如果您沒有脊柱,請使用一個,如果您預定的是左/右使用兩個。

+1

你能否詳細說明你答案的最後一行:「如果你沒有脊柱,使用一個,如果你預定的是左/右使用兩個。」 – 2015-04-21 12:44:59

+0

@RashmiRanjanmallick哈哈!他指的是iPad可以同時在屏幕上顯示兩個頁面的能力。如果屏幕上的頁面是帶有「書脊」的「書」,那麼您應該將兩個視圖控制器設置爲一次激活。否則,只顯示一個。 – 2017-04-20 15:38:46

2

老問題,但下面的實現電話委託和數據源方法轉向一個或下一個頁面(但是,如果委託或數據源設置不檢查):

- (IBAction)navigateReverse:(id)sender 
{ 
    UIViewController *controller = [self.dataSource pageViewController:self viewControllerBeforeViewController:self.designViewControllers[self.currentIndex]]; 

    if (!controller) 
    { 
     return; 
    } 

    NSArray *newViewControllers = @[controller]; 

    NSArray *previousViewControllers = self.viewControllers; 

    __weak __typeof(self) weakSelf = self; 

    [self.delegate pageViewController:self willTransitionToViewControllers:newViewControllers]; 
    [self setViewControllers:newViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) { 
     [weakSelf.delegate pageViewController:weakSelf didFinishAnimating:finished previousViewControllers:previousViewControllers transitionCompleted:finished]; 
    }]; 
} 

- (IBAction)navigateForward:(id)sender 
{ 
    UIViewController *controller = [self.dataSource pageViewController:self viewControllerAfterViewController:self.designViewControllers[self.currentIndex]]; 

    if (!controller) 
    { 
     return; 
    } 

    NSArray *newViewControllers = @[controller]; 

    NSArray *previousViewControllers = self.viewControllers; 

    __weak __typeof(self) weakSelf = self; 

    [self.delegate pageViewController:self willTransitionToViewControllers:newViewControllers]; 
    [self setViewControllers:newViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) { 
     [weakSelf.delegate pageViewController:weakSelf didFinishAnimating:finished previousViewControllers:previousViewControllers transitionCompleted:finished]; 
    }]; 
} 
相關問題