2016-01-13 53 views
0

我一直在試圖解決UIPageViewControllers的手勢和頁面控制器內部的視圖和UIViewControllers上添加的手勢之間的衝突。 我只需要使UIPageViewController成爲其手勢的代表,我該怎麼做?我如何設置UIPageViewController(分頁類型)手勢代理

  1. 我已經在頁面視圖中符合並實現了UIGestureDelegate方法,但它們從不被調用。
  2. 我也循環檢查手勢是否存在於UIPageViewControllers gestureRecognizers屬性中。正如預期的那樣,這個數組是零,正如文檔中所提到的「..如果過渡風格是'UIPageViewControllerTransitionStylePageCurl',只填充。」
  3. 我試着抓取底層的UIScrollView,並將其平移手勢委託給UIPageViewController。無法這樣做。

如何設置UIPageViewController手勢(特別是手勢)委託。

回答

1

這不會爲UIPageViewController的內置平移手勢設置手勢委託,但我有些如何通過獲取底層滾動視圖,然後在滾動視圖上設置新的平移手勢來解決手勢衝突。這個新的Pan手勢具有UIPageViewController作爲它的委託,因此我能夠獲得手勢委託的調用。

-(UIScrollView *)scrollViewInsidePageControl { 
    for (UIView * view in self.view.subviews) { 
     if([view isKindOfClass:[UIScrollView class]]) 
      return (UIScrollView *)view; 
    } 
    return nil; 
} 

而在-viewDidLoad:

self.internalScrollView = [self scrollViewInsidePageControl]; 
self.customPanGesture = [UIPanGestureRecognizer new]; 
self.customPanGesture.delegate = self; 
[self.internalScrollView addGestureRecognizer:_customPanGesture]; 

上面的代碼的協議方法的UIPageViewController實例

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    if(otherGestureRecognizer.view == self.internalScrollView) 
     return NO; 
    else 
     return YES; 
} 


- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 
{ 
    if (gestureRecognizer == _customPanGesture) 
    { 
     // Did required handling here 
    } 
    return YES; 
} 
0

要設置UIPageViewController委託,只需將「UIPageViewControllerDelegate」和「UIPageViewControllerDataSource」添加到您的UIPageViewController。然後將您的UIPageViewController的委託和數據源設置爲self(委託)。

class MyPageViewController : UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource { 
    override func viewDidLoad() { 
    super.viewDidLoad() 
    self.dataSource = self 
    self.delegate = self 
    } 
} 

如果不設置DataSource,你將無法擁有的觀點之間的UIPageViewController滑動手勢。

+0

進行的呼叫爲UIGestureRecognizerDelegate在此之後,委託不接收中提到的方法調用UIGestureRecognizerDelegate協議。 – BangOperator