2014-05-23 3 views
8

사용자가 손가락으로 왼쪽에서 오른쪽으로 탐색하는 PageViewController에 일련의 VC가 있습니다. 근본적으로 핑거 스 와이프와 동일한 동작을 수행하는 버튼을 추가해야합니다. VC를 통해 왼쪽 또는 오른쪽으로 하나씩 움직입니다. 어떻게해야합니까?iOS : UIPageViewController - 버튼을 사용하여 다음 페이지로 이동

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

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController; 

사용자가 버튼을 클릭하면 나도 같은 일을 할 수 어떻게든지 거기 : 지금은 사용자가 스 와이프로 동적으로 벤처 캐피탈을 설정하려면 다음 두 가지 방법을 사용하고 있습니다?

답변

11

페이지 뷰 컨트롤러에서 setViewControllers:direction:animated:completion:을 사용하여 전환 애니메이션을 사용하여 프로그래밍 방식으로 현재 표시된보기 컨트롤러를 프로그래밍 방식으로 설정할 수 있습니다.

다음은 임의의 배경색으로보기 컨트롤러를 표시하는 예입니다. 특정 뷰 컨트롤러를 사용하도록 조정할 수 있습니다. 경우

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.pvc = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 
    self.pvc.view.frame = CGRectInset(self.view.bounds, 200, 200); 
    [self.view addSubview:self.pvc.view]; 

    [self.pvc setViewControllers:@[[self randomVC]] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; 
} 

-(UIViewController*)randomVC 
{ 
    UIViewController *vc = [[UIViewController alloc] init]; 
    UIColor *color = [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1]; 
    vc.view.backgroundColor = color; 
    return vc; 
} 

- (IBAction)previousButtonPressed:(id)sender { 
    [self.pvc setViewControllers:@[[self randomVC]] direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil]; 
} 

- (IBAction)nextButtonPressed:(id)sender { 
    [self.pvc setViewControllers:@[[self randomVC]] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; 
} 
+0

작품! 아직도 UIPageViewController 뒤에있는 사고에 대해 머리를 감쌀 필요가 있지만, 그 동안 솔루션에 대해 감사드립니다. –

+0

여러분을 환영합니다. 이는 실제로 콘텐츠를 화면에 가져 오는 또 다른 방법입니다. 그 내용은 UIViewController 하위 클래스에 있습니다. 이 기법을 사용하면 코드를보다 모듈화하고 로직을 기본보기 컨트롤러가 아닌 적절한보기 컨트롤러에 둘 수 있습니다. – MJN

+0

@MJN forward와 next 버튼이 각각의 뷰 컨트롤러 (페이지)에 배치되어 거기에서 IBAction 메서드를 호출하는 방법은 무엇입니까? 답장을 보내주십시오. – user3404693

0

페이지는 페이지 제어 ON 첨가 버튼 (이전, 다음) & 와이프 의해 의해 조종 될 수있다. 아래를 통과하십시오 :

//Set Delegate & Data Source for PageView controller [Say in View Did Load] 
    self.pageViewController.dataSource = self; 
    self.pageViewController.delegate = self; 



// PageBefore & After When User Scroll to move next or previous page 

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

    [_nextBtn setTitle:@"Next" forState:UIControlStateNormal]; 

    NSUInteger index = ((PageContentViewController*) viewController).pageIndex; 

    if (index == NSNotFound) 
    { 
     return nil; 
    } 

    if (index > 0) 
    { 
     index--; 
    } 
    else 
    { 
     return nil; 
    } 

    return [self viewControllerAtIndex:index]; 

} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{ 
    NSUInteger index = ((PageContentViewController*) viewController).pageIndex; 

if (index == NSNotFound) { 
    return nil; 
} 


if (index < 3) 
{ 
    index++; 
}else 
{ 
    return nil; 
} 
return [self viewControllerAtIndex:index];} 

//To Match Exact Index page view when scrolled & navigated using button action. Place button index when page is been translated. 



- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers{  
buttonIndex = (int)((PageContentViewController*) pendingViewControllers.firstObject).pageIndex;} 

-(void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{  
if (buttonIndex == 0) 
{ 
    _backButton.hidden = true; 
}else if (buttonIndex == [self.pageImages count] - 1) 
{ 
    _backButton.hidden = false; 
    [_nextBtn setTitle:@"Begin" forState:UIControlStateNormal]; 
}else 
{ 
    _backButton.hidden = false; 
} 
} 

// 이전, 다음 버튼 액션

-(void)backBtnClicked:(id)sender{ 
if (buttonIndex > 0) 
{ 
buttonIndex -= 1; 
} 
    if (buttonIndex < 1) { 
     _backButton.hidden = YES; 
    } 
    if (buttonIndex >=0) { 
     [_nextBtn setTitle:@"Next" forState:UIControlStateNormal]; 
     PageContentViewController *startingViewController = [self viewControllerAtIndex:buttonIndex]; 
     NSArray *viewControllers = @[startingViewController]; 
     [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 
    }} 

-(void)nextBtnAction:(id)sender{ 
if (buttonIndex < 3) 
{ 
buttonIndex += 1; 
} 

if(buttonIndex == _pageImages.count){ 
    //Navigate Outside Pageview controller   
} else{   
    if (buttonIndex ==3) { 

     [_nextBtn setTitle:@"Begin" forState:UIControlStateNormal]; 
    } 
    _backButton.hidden = NO; 

    PageContentViewController *startingViewController = [self viewControllerAtIndex:buttonIndex]; 
    NSArray *viewControllers = @[startingViewController]; 
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 
}} 

//BUTTON INDEX 
-(NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController{ 
    return [self.pageImages count];} 

-(NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController{ 
    return buttonIndex;} 
관련 문제