2014-04-25 2 views
4

viewControllerBeforeViewControllerviewControllerAfterViewController 메서드 중 하나가 nil을 반환하면 카운터 부분도 호출됩니다.UIPageViewControllerDatasource는 왼쪽 스 와이프 및 오른쪽 스 와이프 메서드를 모두 호출합니다.

이 동작이 필요한 동작입니까? 어떤 식 으로든이 일을 막을 수 있습니다. 이것이 내가하려고하는 것입니다. viewControllerAfterViewControllerviewControllerBeforeViewController 후 알림 [viewController showToasterWithText:@"Please answer the question to continue"];을 호출되는 경우

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

    if ([viewController isKindOfClass:[QuestionViewController class]]){ 
     QuestionViewController* qvc = (QuestionViewController*)viewController; 

     CVPQuestion* prevQuestion = [_surveyContext previousQuestion:qvc.question]; 
     return [self questionControllerWithQuestion:prevQuestion]; 
    } 
    if ([viewController isKindOfClass:[SurveyEndedViewController class]]){ 
     return [self questionControllerWithQuestion:[self.questionList lastObject]]; 
    } 
    return nil; 
} 

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

    if ([viewController respondsToSelector:@selector(question)]){ 
     CVPQuestion* nextQuestion = [_surveyContext previousQuestion:viewController.question]; 
     if (nextQuestion == nil && ![_surveyContext isAnswered:viewController.question]){ 
      [viewController showToasterWithText:@"Please answer the question to continue"]; 
     } 
     QuestionViewController* qc = [self questionControllerWithQuestion:[_surveyContext nextQuestion:viewController.question]]; 

     if (!qc){return [self surveyEndedController:viewController.question];} 
     return qc; 
    } 
    return nil; 
} 

너무 전송됩니다.

답변

0

'UIPageviewcontroller'가 실제로 'UIScrollViewDelegate'를 사용하지 않는 것처럼 보입니다. 따라서 'UIPageViewController'를 서브 클래 싱하고 'UIScrollViewDelegate'를 사용하면 앞쪽으로 스 와이프하거나 뒤로 스 와이프 할 수 있습니다.

// PageViewController에서있는 ScrollView를 스크롤 받으

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 
     // Do any additional setup after loading the view. 
     for (UIView* v in [self.view subviews]){ 
      if ([v isKindOfClass:[UIScrollView class]]){ 
       _scrollView = (UIScrollView*)v; 
      } 
     } 

     if (_scrollView){ 
      _scrollView.delegate = self; 
     } 
    } 

// 기록 내용 스크롤 뷰는 변위에 따라

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ 
    _startContentOffset = _scrollView.contentOffset; 
    _transitionState = SurveyPageviewCtlrTransitionInitiated; 
    [_transitionStateDelegate transitionInitiated:self]; 
} 

// 방향을 끌기 시작하면 오프셋

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ 
    if (_scrollView.contentOffset.x > _startContentOffset.x){ 
     [self.delegate forwardDrag]; 
    } 
    else{ 
     [self.delegate reverseDrag]; 
} 
관련 문제