2012-05-28 44 views
2

我正在使用iBook類似於頁面轉向過渡(UIPageViewControllerTransitionStylePageCurl)來導航幾個UIViewController頁面。如何在沒有手勢的情況下以編程方式觸發翻頁過渡?

所以我實現UIPageViewControllerDataSource委託功能

- (UIViewController *)pageViewController: 
(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 

- (UIViewController *)pageViewController: 
(UIPageViewController *)pageViewController viewControllerBeforeViewController: 
(UIViewController *)viewController 

這些得到做手勢翻頁時調用正確。到現在爲止還挺好。

除了這種默認行爲,我想在頁面的兩側添加一個長按手勢識別器作爲快速移動到最後一頁或第一頁的快捷方式。我已經設法將手勢識別器添加到頁面中,但我不知道如何在沒有內置滑動的情況下使頁面移動。

如何觸發頁面轉到特定頁面(UIViewController)以編程方式

+0

? – Pfitz

+0

不,我不要用故事板。 – Bernd

回答

3

當用戶執行長輕掃,您可以發送所需的viewController(第一或在您的案件最後一頁)的viewControllers說法方法:

- (void) setViewControllers:(NSArray*)viewControllers 
        direction:(UIPageViewControllerNavigationDirection)direction 
        animated:(BOOL)animated 
       completion:(void (^)(BOOL finished))completion; 

詳細內容見格雷厄姆在回答:

Is it possible to Turn page programmatically in UIPageViewController?

如果我讀了你的權利,正在顯示您的UIViewControllers包含按鈕,你希望他們也能調用這個函數。

要從正在顯示的UIViewControllers中以編程方式調用該方法,可以使UIPageViewController成爲正在顯示的UIViewController的委託,然後在按下按鈕時調用委託方法。

這樣做的一個不好的方法是將UIViewControllers的反指針(存儲爲WEAK屬性!)發送到您的UIPageViewController並調用respondsToSelector:。

+0

非常感謝。與代表的方法正是我正在尋找的缺失的一塊。另外,以下教程幫助您開始使用它。http://www.roostersoftstudios.com/2011/04/12/simple-delegate-tutorial-for-ios-development/#comment-190。好極了! :) – Bernd

+0

你能給我更多的細節。我想將數據發送到另一個視圖控制器,並在按下按鈕時更改頁面控制器的視圖。 – Dinesh

0

看一看這個UIPageViewController方法:

- (void)setViewControllers:(NSArray *)viewControllers 
       direction:(UIPageViewControllerNavigationDirection)direction 
        animated:(BOOL)animated 
       completion:(void (^)(BOOL finished))completion; 

UIPageViewController Class Reference

+2

感謝這個,但是我不知道在哪裏可以調用這個函數。我已經在我的PageAppViewController(UIPageViewController類)中使用了「setViewControllers:direction:animated:completion」函數,該函數使用頁面初始化Array並充當數據源和委託。 但是應該觸發此功能的按鈕現在正在顯示自己的的UIViewController類的一部分。我怎樣才能將引用從「在那裏」設置到UIPageView類來調用這個函數?我會很感激任何額外的筆記。 – Bernd

0

確保你沒有設置self.pageViewController.datasource爲自我。然後你可以使用這個UIPageViewController函數以及手勢識別器。

-[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL]; 
  1. 可以設置gesturerecognizer的委託,並實現這一點:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
    
  2. 或者你可以你使用故事板只需添加一個手勢識別像UISwipeGestureRecognizer

相關問題