2016-01-13 2 views
0

Я пытался исправить конфликты между жесты UIPageViewControllers и те, что были добавлены в представлениях, и UIViewControllers, лежащие внутри контролеров страниц. Мне просто нужно сделать UIPageViewController делегатом для своих жестов, как я могу это сделать?Как я могу назначить делегатам gestures UIPageViewController (Paging Type)

  1. Я применил методы UIGestureDelegate в представлении страницы, но они никогда не вызываются.
  2. Я также зациклил, чтобы проверить, существуют ли жесты в свойстве UCRageViewControllers 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]; 

Приведенный выше код сделал звонки по методам протокола для UIGestureRecognizerDelegate на 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 для себя (делегата).

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

Если вы не установите DataSource, вы не будете иметь возможность слайд жесты UIPageViewController между видами.

+0

После этого делегат не принимает вызовы методов, упомянутых в протокол UIGestureRecognizerDelegate. – BangOperator

Смежные вопросы