4

這是一個漫長的一天,在鍵盤,所以我伸手:-)UIPageViewController陷阱所有UITapGestureRecognizer活動

我基本上遵循蘋果的標準模板典型的實現有一個UIPageViewController。我正在嘗試添加一個疊加層,它允許用戶執行諸如觸摸按鈕之類的操作,以跳轉到某些頁面或關閉視圖控制器以轉到應用程序的另一部分。

我的問題是,UIPageViewController捕捉我的覆蓋子視圖中的所有事件,我努力尋找一個可行的解決方案。

下面是一些代碼,以幫助例子...

在viewDidLoad中

// Page creation, pageViewController creation etc.... 

self.pageViewController.delegate = self; 

[self.pageViewController setViewControllers:pagesArray 
            direction:UIPageViewControllerNavigationDirectionForward 
            animated:NO 
           completion:NULL]; 

self.pageViewController.dataSource = self; 

[self addChildViewController:self.pageViewController]; 
[self.view addSubview:self.pageViewController.view]; 

// self.overlay being the overlay view 

if (!self.overlay) 
{ 
    self.overlay = [[MyOverlayClass alloc] init]; // Gets frame etc from class init 
    [self.view addSubview:self.overlay]; 
} 

這一切的偉大工程。疊加層被創建,它會像預期的那樣顯示在UIPageViewController的頁面頂部。當頁面翻轉時,它們翻轉覆蓋層下 - 再次如您所期望的那樣。

但是,self.overlay視圖內的UIButtons永遠不會獲得輕敲事件。 UIPageViewController響應所有事件。

我已經嘗試覆蓋-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch每個建議沒有成功。

UIPageViewController Gesture recognizers

我曾嘗試手動捕獲所有事件和處理他們自己 - 不工作(和說實話,即使沒有它似乎是一個黑客攻擊的一位)。

有沒有人有關於如何捕捉事件的建議,或者更好的方法來使用UIPageViewController頂部的覆蓋。

任何和所有幫助非常感謝!

回答

3

嘗試通過UIPageViewController.GestureRecognizers迭代並分配self爲那些手勢委託和實施

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch; 

您的代碼可能是這樣的:

在viewDidLoad中

for (UIGestureRecognizer * gesRecog in self.pageViewController.gestureRecognizers) 
{ 
     gesRecog.delegate = self; 
} 

並添加以下方法:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if (touch.view != self.pageViewController.view] 
    { 
     return NO; 
    } 
    return YES; 
} 
+0

這工作Basem!對不起,我直到現在才把它作爲正確的答案! – Hooligancat

0

防止UIPageViewController滾動的文檔化方式是不分配dataSource屬性。如果您指定了數據源,它將會轉到基於手勢的導航模式,這正是您想要阻止的。

如果沒有數據源,當您想用setViewControllers:direction:animated:completion方法手動提供視圖控制器時,它將在視圖控制器之間按需移動。

以上可以從Apple's documentation of UIPageViewController(概述,第二段)推導出:

爲了支持基於姿勢的導航,則必須提供使用數據源對象視圖控制器。