Reputation: 346
I've been working on getting a UIPageViewController to work for quite some time, and the lack of result is starting to drive me nuts...
The following code is part tutorial (which I didn't get to work either) and part me. Right now I'm trying just trying to make each viewControllers view a single label, so that I can make sure it works before adding stuff.
- (void)viewDidLoad
{
[super viewDidLoad];
vcArray = [self createViewControllers:1];
NSLog(@"TEST1");
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
self.pageController.delegate = self;
self.pageController.dataSource = self;
NSLog(@"TEST2 %@", vcArray);
[self.pageController setViewControllers:vcArray direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
[[pageController view] setFrame:[[self view] bounds]];
NSLog(@"TEST3");
[self addChildViewController:self.pageController];
[[self view] addSubview:[self.pageController view]];
[pageController didMoveToParentViewController:self];
NSLog(@"TEST4");
}
- (NSArray *) createViewControllers:(NSInteger)ammount{
NSMutableArray *array = [NSMutableArray new];
for (NSInteger i = 0; i <= ammount; i++) {
PageContentViewController *pageContentViewController = [PageContentViewController new];
UILabel *label = [UILabel new];
label.text = @"STRING";
pageContentViewController.view = label;
[array addObject:pageContentViewController];
}
return array;
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger index = [self indexOfViewController:
(PageContentViewController *)viewController];
if ((index == 0) || (index == NSNotFound)) {
return nil;
}
index--;
return [vcArray objectAtIndex:index];
}
- (UIViewController *)pageViewController:
(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger index = [self indexOfViewController:
(PageContentViewController *)viewController];
if (index == NSNotFound) {
return nil;
}
index++;
if (index == [vcArray count]) {
return nil;
}
return [vcArray objectAtIndex:index];
}
- (NSUInteger)indexOfViewController:(PageContentViewController *)viewController
{
return [vcArray indexOfObject:viewController.dataObject];
}
Can you see what I am missing? I've been going through too many tutorials and stackoverflow questions which has left me only more confused...
Thanks in advance, Tom
Upvotes: 0
Views: 866
Reputation: 7605
General tips:
Don't use [PageContentViewController new]
, use [[PageContentViewController alloc] initWithNibName:nil bundle:nil]
. Don't use [UILabel new]
, use [[UILabel alloc] initWithFrame:CGZeroRect]
.
Step through your code. Check for things that should be objects that are nil
. Objective-C will silently allow things to be nil
, even if you call methods on them!
Upvotes: 1