2016-08-15 5 views
0

Ich bin neu zu verwenden UIPageViewController und konnte keine gute Erklärung dafür in Objective-C finden. Ich habe versucht, eine selbst zu implementieren, aber es zeigt nur einen schwarzen Bildschirm beim Start. Was mache ich falsch?UIPageView Implementierung schwarzer Bildschirm

Ich habe einen ViewController in IB eingerichtet, der der ursprüngliche ViewController ist, und zwei andere, die die zwei Storyboard-IDs unten haben und nur dort sitzen, ohne mit irgendetwas verbunden zu sein.

Hier ist mein Code für die erste Viewcontroller:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 
    [self addChildViewController:self.pageViewController]; 
    self.pageViewController.delegate = self; 
    self.pageViewController.dataSource = self; 

    UIViewController *vc1 = [self.storyboard instantiateViewControllerWithIdentifier:@"vc1"]; 
    UIViewController *vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"vc2"]; 

    viewControllers = [[NSArray alloc] initWithObjects:vc1,vc2, nil]; 

    [self.pageViewController setViewControllers:@[vc1] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; 

} 

-(UIViewController *)viewControllerAtIndex:(NSUInteger)index 
{ 
    return viewControllers[index]; 
} 

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
    viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    NSUInteger currentIndex = [viewControllers indexOfObject:viewController]; 

    --currentIndex; 
    currentIndex = currentIndex % (viewControllers.count); 
    return [viewControllers objectAtIndex:currentIndex]; 
} 

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
     viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    NSUInteger currentIndex = [viewControllers indexOfObject:viewController]; 

    ++currentIndex; 
    currentIndex = currentIndex % (viewControllers.count); 
    return [viewControllers objectAtIndex:currentIndex]; 
} 

-(NSInteger)presentationCountForPageViewController: 
(UIPageViewController *)pageViewController 
{ 
    return viewControllers.count; 
} 

-(NSInteger)presentationIndexForPageViewController: 
(UIPageViewController *)pageViewController 
{ 
    return 0; 
} 
+0

Sie können check this out - https://github.com/mindsnacks/MSPageViewController Vielleicht helfen. – Ro4ch

+1

Ich kann den Punkt nicht sehen, wo Sie Ihren PageViewController zum Bildschirm hinzugefügt haben –

+0

Es ist hier: [self addChildViewController: self.pageViewController]; –

Antwort

0

Du

addSubview fehlt

Und danach sollten Sie

didMoveToParentViewCon nennen Troller

für Life-Cycle-Ereignisse auf Kind View Controller.

@interface ViewController()<UIPageViewControllerDelegate, UIPageViewControllerDataSource> 
@property (nonatomic, strong) UIPageViewController* pageViewController; 
@property (nonatomic,strong) NSArray *viewControllers; 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 
    [self addChildViewController:self.pageViewController]; 
    [self.view addSubview:self.pageViewController.view]; 
    [self.pageViewController didMoveToParentViewController:self]; 
    self.pageViewController.delegate = self; 
    self.pageViewController.dataSource = self; 

    UIViewController *vc1 = [[UIViewController alloc] init]; 
    vc1.view.backgroundColor = [UIColor blueColor]; 
    UIViewController *vc2 = [[UIViewController alloc] init]; 
    vc2.view.backgroundColor = [UIColor redColor]; 

    self.viewControllers = [[NSArray alloc] initWithObjects:vc1,vc2, nil]; 

    [self.pageViewController setViewControllers:@[vc1] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; 

} 

-(UIViewController *)viewControllerAtIndex:(NSUInteger)index 
{ 
    return self.viewControllers[index]; 
} 

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
    viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    NSUInteger currentIndex = [self.viewControllers indexOfObject:viewController]; 

    --currentIndex; 
    currentIndex = currentIndex % (self.viewControllers.count); 
    return [self.viewControllers objectAtIndex:currentIndex]; 
} 

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
     viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    NSUInteger currentIndex = [self.viewControllers indexOfObject:viewController]; 

    ++currentIndex; 
    currentIndex = currentIndex % (self.viewControllers.count); 
    return [self.viewControllers objectAtIndex:currentIndex]; 
} 

-(NSInteger)presentationCountForPageViewController: 
(UIPageViewController *)pageViewController 
{ 
    return self.viewControllers.count; 
} 

-(NSInteger)presentationIndexForPageViewController: 
(UIPageViewController *)pageViewController 
{ 
    return 0; 
} 
@end 
+0

@ Balázs Vincze hast du meine Antwort versuchen? – MCMatan

0
- (void)viewDidLoad { 
    [super viewDidLoad]; 


    self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 

    self.pageController.dataSource = self; 
    self.pageController.delegate = self; 

    [NSTimer scheduledTimerWithTimeInterval:5.0 
            target:self 
            selector:@selector(loadNextController) 
            userInfo:nil 
            repeats:YES]; 


    [[self.pageController view] setFrame:[[self sliderView] bounds]]; 

    self.pageControl.numberOfPages = 5; 
    self.pageControl.currentPage = 0; 

    PageChildVC *initialViewController = [self viewControllerAtIndex:0]; 

    NSArray *viewControllers = [NSArray arrayWithObject:initialViewController]; 

    [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 

    [self addChildViewController:self.pageController]; 
    [[self sliderView] addSubview:[self.pageController view]]; 
    [self.pageController didMoveToParentViewController:self]; 
} 


- (PageChildVC *)viewControllerAtIndex:(NSUInteger)index { 
    if ((5 == 0) || (index >= 5)) { 
     return nil; 
    } 
    PageChildVC *childViewController = [[PageChildVC alloc] initWithNibName:@"PageChildVC" bundle:nil]; 
    childViewController.index = index; 
    return childViewController; 

} 
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { 
    NSUInteger index = ((PageChildVC*) viewController).index; 
    if ((index == 0) || (index == NSNotFound)) { 
     index = 5; 
    } 
    index--; 
    return [self viewControllerAtIndex:index]; 
    } 
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { 
    NSUInteger index = ((PageChildVC*) viewController).index; 
    if (index == NSNotFound) { 
     return nil; 
    } 
    index++; 
    if (index == 5) { 
     index = 0; 
    } 
    return [self viewControllerAtIndex:index]; 
    } 
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController { 
    return 5; 
} 
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController { 
    return [(PageChildVC *)[self.pageController.viewControllers firstObject] index]; 
} 
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed 
{ 
    PageChildVC *currentViewController = pageViewController.viewControllers[0]; 
    currentIndex = (int)currentViewController.index; 
    [self.pageControl setCurrentPage:currentIndex]; 
} 
- (void)loadNextController { 
    currentIndex++; 
    PageChildVC *nextViewController = [self viewControllerAtIndex:currentIndex]; 
    if (nextViewController == nil) { 
     currentIndex = 0; 
     nextViewController = [self viewControllerAtIndex:currentIndex]; 
    } 
    [self.pageController setViewControllers:@[nextViewController] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 
    [self.pageControl setCurrentPage:currentIndex]; 
} 
Verwandte Themen