If viewControllerBeforeViewController
viewControllerAfterViewController
任一方法都返回 nil,计数器部分也会被调用。
这种行为是预期行为吗?无论如何我都可以阻止这件事发生。这就是我试图做的事情。
- (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;
}
If viewControllerAfterViewController
之后会接到电话viewControllerBeforeViewController
通知[viewController showToasterWithText:@"Please answer the question to continue"];
也会被发送。
看起来“UIPageviewcontroller”并没有真正使用“UIScrollViewDelegate”。因此,子类化“UIPageViewController”并使用“UIScrollViewDelegate”似乎可以解决它是向前滑动还是向后滑动的问题。
//从PageViewController中获取ScrollView的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];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)