2013-05-25 4 views
0

Я создаю контроллер представления контейнера, где контроллеры дочерних представлений показаны как постраничный scrollView. В этом контроллере контейнера я хочу изменить между страницами, прокручивающимися горизонтально, двумя пальцами. Таким образом, я использовал UIScrollView, и я поставил его так:Пользовательский контейнер с использованием UIScrollView двумя пальцами

self.scrollView.showsHorizontalScrollIndicator = NO; 
self.scrollView.showsVerticalScrollIndicator = NO; 
self.scrollView.delegate = self; 

[self.scrollView setContentOffset:[self rectForPage:1].origin]; 

for (UIGestureRecognizer *gestureRecognizer in self.scrollView.gestureRecognizers) { 
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { 
     UIPanGestureRecognizer *panGR = (UIPanGestureRecognizer *) gestureRecognizer; 
     panGR.minimumNumberOfTouches = 2; 
    } 
} 

Я также внедрили метод - (void)scrollViewDidScroll:(UIScrollView *)sender, чтобы избежать вертикального скроллинга

- (void)scrollViewDidScroll:(UIScrollView *)sender { 
    CGFloat pageWidth = self.scrollView.frame.size.width; 
    int page = floor((self.scrollView.contentOffset.x +pageWidth/2)/pageWidth); 
    self.pageControl.currentPage = page; 
    [self.scrollView setContentOffset: CGPointMake(self.scrollView.contentOffset.x, 0)]; 
} 

Теперь проблема заключается в том, что childViewControllers подвиды не может получать штрихи от пользователя. Я хочу, чтобы одно касание было передано с помощью иерархии представлений. Я прочитал о подклассе UIScrollView, чтобы перезаписать метод - (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view, но он вызывается только в том случае, если subviews является UIControl. Как я могу это сделать?

Цель состоит в том, что это ChildViewControllers есть UIButtons внутри и ScrollViews, которые должны быть использованы с singleTouches

ответ

0

может быть, не совсем, но это может помочь вам. Создайте подкласс вида прокрутки и реализуйте это;

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    // UIView will be "transparent" for touch events if we return NO 
    for (id subview in self.subviews) { 
     if ([subview isKindOfClass:[YourViewController class]]) { 
      YourViewController *VC = (YourViewController*) subview; 

      if (CGRectContainsPoint(YourViewController.frame, point)) { 
       return YES; 
      } 
     } 
    } 
    return NO; 
} 
+0

Спасибо за ответ, но это не так. Работа ... Даже если я всегда вернусь, кнопки не реагируют на просмотр контроллера детского вида :( – Jpellat

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