보여주는 개체의 인덱스를 반환하는 다른 요소를 기반으로 ViewController
으로 이동할 뷰를 만들려고합니다.다른 ViewController를 표시하는 PageViewController를 얻는 방법
특정 ViewController를 한 번 보여줄 수는 있지만, 다시 돌아올 때는 화면에 어떤 인덱스가 있더라도 항상 ViewController
이됩니다.
PageViewController
I 설정 ViewDidLoad
에서과에 하위 뷰로 iCarousel을 추가
여기 내 코드입니다. 여기
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationVertical options:nil];
self.pageViewController.dataSource = self;
[[self.pageViewController view] setFrame:[[self view] bounds]];
_controller1 = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
_controller2 = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
_controller3 = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
self.viewControllers = [NSArray arrayWithObjects:_controller1, nil];
[self.pageViewController setViewControllers:self.viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];
[self.view addSubview:_carousel];
그리고
는 사용자가보기를 위로 끌어 때 화면에 표시해야하는ViewController
제어하는 코드입니다.
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
if (self.pageViewController.viewControllers[0] == self.controller2)
return self.controller1;
return nil;
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
if (self.pageViewController.viewControllers[0] == self.controller1) {
if ([self.carousel currentItemIndex] == 2) {
NSLog(@"Giving view %d", [self.carousel currentItemIndex]);
return self.controller2;
} else if ([self.carousel currentItemIndex] == 3) {
NSLog(@"Giving view %d", [self.carousel currentItemIndex]);
return self.controller3;
}
}
return nil;
}
내가 어떻게 든
ViewController
를 뽑아 파괴해야합니까, 또는이는
UIPageViewController
으로도 가능하다?
감사합니다.
편집 : 내가 그들로 전환 할 때 ViewControllers의 인스턴스를 시도 :
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
if ([self.carousel currentItemIndex] == 2) {
NSLog(@"load first vc %d", [self.carousel currentItemIndex]);
FirstViewController *secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
return secondVC;
} else if ([self.carousel currentItemIndex] == 3) {
NSLog(@"load third vc 2 %d", [self.carousel currentItemIndex]);
SecondViewController *thirdVC = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
return thirdVC;
}
return nil;
}
를이 방법이 제대로 작동했지만 권리 View
여전히로드처럼 내가 로그 메시지를보고 있어요 오직 처음으로. 또한 처음으로 SecondViewController
또는 ThirdViewController
으로 전환하면 로그 메시지가 두 번 표시됩니다.
편집 :ViewController
을 계속로드하면서 계속 스크롤하면서 계속 스크롤 할 수 있다는 것을 알게되었습니다. 따라서 iCarousel
을 색인 2로 스크롤하고 View
을 가져 오면 나는 이전의보기를 얻습니다. 그러나 다시 "당겨"면 나는 올바른 것을 얻습니다.
나는 아주 가깝다고 느낀다. 그러나 내가 놓친 작은 것은 무엇인가?
최종 편집 :
좋아 분명히 내 코드는 처음부터 정확했다. UIPageViewControllerTransitionStyleScroll
의 버그에 대한 토론은 someand some more입니다. 그래서 간단하게 전환을 컬 (curl)로 바꾸는 것은 내가하려고했던 것을했습니다.
만약 누군가가 내가 어떻게 구현할 것인지 대답 할 수 있다면이 것이 the suggested answer이 될 것입니다.
약간 손실되었습니다. 내가 정확히 이것을 어떻게 사용하겠습니까? 그 메소드를'UIPageViewControllerDataSource' 메소드 내에서 사용합니까? – Pahnev
필요할 때마다 setViewController를 사용할 수 있습니다. – Rollo