2014-11-13 6 views
0

UIPageViewController에서 페이지 전환을 시작하는 데 사용할 수있는 두 개의 단추가 있습니다. 나는이 같은 프로그래밍 방식으로 하나의 페이지에서 다른 페이지로의 전환을 시작합니다컨트롤 UIPageViewController 프로그래밍 방식으로 이동

//to go left 
[_pageVC setViewControllers:@[[self pageViewController:_pageVC viewControllerBeforeViewController:[_pageVC.viewControllers lastObject]]] 
         direction:UIPageViewControllerNavigationDirectionReverse 
         animated:YES 
        completion:^(BOOL finished) { }]; 

문제점이 버튼의 위치가 원치 않는 동작이 발생하고 심지어 응용 프로그램을 충돌하는 빠르고, 그들에게 여러 번 두 드릴 매우 쉽게 만들 것입니다. 그래서 페이지가 전환되는 동안 나는 그들을 비활성화하고 싶습니다.

애니메이션을 시작할 때 을 만들었습니다. YES으로 설정했지만 어디서 NO으로 설정해야할지 모르겠습니다. 위의 함수에서 completition 블록이 너무 일찍 호출되고 전환이 프로그래밍 방식으로 시작된 경우 pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:이 호출되지 않습니다 (문서 : Called after a gesture-driven transition completes).

전환이 실행되는 동안 어떻게 버튼을 비활성화 할 수 있습니까?

+1

전환 할보기 컨트롤러의 'ViewDidAppear'에서 무언가를 발사 할 수 있습니까? 나는 그 방법이 VC가 완전히 화면에 나타나면 시작된다고 생각한다. – pbasdf

+0

@pbasdf 예, 그렇지만 포함 된 VC 구현을 페이지 컨트롤러와 독립적으로 만듭니다. 하지만 지금 당장 당신 것이 최선의 방법입니다. 고맙습니다. – Daniel

답변

0

pbasdf의 솔루션을 사용하여 버튼을 비활성화했지만 이미 올바르게 작동하고있었습니다. 문제는 버튼을 사용하지 못하게하는 것이 아니라 스 와이프가 여전히 활성화되어 이상한 행동을 유발한다는 것을 깨달았습니다.

내가 해제하고 버튼을 this method으로 활성화/비활성화 할 때 와이프 수 :

-(void)setPVScrollEnabled:(BOOL)scrollEnabled 
{ 
    for (UIScrollView *view in self.pageViewController.view.subviews) { 

     if ([view isKindOfClass:[UIScrollView class]]) { 

      view.scrollEnabled = scrollEnabled; 
     } 
    } 
} 
0

가 타임 아웃을 추가합니다. 예를 들어 0.5 초 동안 버튼을 비활성화하십시오 :

self.buttonNext.enabled = NO; 
self.buttonPrev.enabled = NO; 

[_pageVC setViewControllers:@[[self pageViewController:_pageVC viewControllerBeforeViewController:[_pageVC.viewControllers lastObject]]] 
         direction:UIPageViewControllerNavigationDirectionReverse 
         animated:YES 
        completion:nil]; 

    __weak YourClass *weakSelf = self; 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    weakSelf.buttonNext.enabled = YES; 
    weakSelf.buttonPrev.enabled = YES; 
}); 
+0

시간 초과를 추가하는 것은 매우 못생긴 해결책입니다. 시간이 얼마나 걸릴지 알 수 없습니다. viewDidAppear 솔루션을 선호합니다. – Daniel

관련 문제