I have spent almost 8 hours finding out how to jump to a particular page number in UIPageViewController... below is what my project looks like
I want to make an app which looks like Ibooks---
I have taken the help from the code presented here - http://www.ioslearner.com/tag/uipageviewcontroller-sample-code/
I have made a plist and UITableView , I select the value from TableView and display the same on webView placed on UIPAgeiewController, but the problem is that only the page in web view changes and not the actual page number of the UIPageViewController....
If I narrow down my question it would look like --- is there a way to switch between page numbers in UIPageViewController.... ???
You have to instantiate the view controller(s) that manage the page(s) you want to jump to and then call the page view controller's setViewControllers:direction:animated:completion:
method, passing the new view controller(s).
Swift Code:
func goToPage(index: Int) {
if index < viewControllers.count {
pageVC!.setViewControllers([viewControllers[index]], direction: .Forward, animated: true, completion: nil)
}
}
Here is another example how to jump to page with parsed Index:
-(void)gotoPage:(int)index{
SinglePageViewController *viewController = [self viewControllerAtIndex:index];
UIPageViewControllerNavigationDirection direction;
if(_curIndex <= index){
direction = UIPageViewControllerNavigationDirectionForward;
}
else
{
direction = UIPageViewControllerNavigationDirectionReverse;
}
if(_curIndex < index)
{
for (int i = 0; i <= index; i++)
{
if (i == index) {
[self.pageViewController setViewControllers:@[viewController]
direction:direction
animated:YES
completion:nil];
}
else
{
[self.pageViewController setViewControllers:@[[self viewControllerAtIndex:i]]
direction:direction
animated:NO
completion:nil];
}
}
}
else
{
for (int i = _curIndex; i >= index; i--)
{
if (i == index) {
[self.pageViewController setViewControllers:@[viewController]
direction:direction
animated:YES
completion:nil];
}
else
{
[self.pageViewController setViewControllers:@[[self viewControllerAtIndex:i]]
direction:direction
animated:NO
completion:nil];
}
}
}
_curIndex = index;
}
I use this function (I'm always in landscape, 2 page mode)
-(void) flipToPage:(NSString * )index {
int x = [index intValue];
LeafletPageContentViewController *theCurrentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
NSUInteger retreivedIndex = [self indexOfViewController:theCurrentViewController];
LeafletPageContentViewController *firstViewController = [self viewControllerAtIndex:x];
LeafletPageContentViewController *secondViewController = [self viewControllerAtIndex:x+1 ];
NSArray *viewControllers = nil;
viewControllers = [NSArray arrayWithObjects:firstViewController, secondViewController, nil];
if (retreivedIndex < x){
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
} else {
if (retreivedIndex > x ){
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:NULL];
}
}
}
Maybe you need this too
- (LeafletPageContentViewController *)viewControllerAtIndex:(NSUInteger)index {
if (([self.modelArray count] == 0) || (index >= [self.modelArray count])) {
return nil;
}
LeafletPageContentViewController *dataViewController;
dataViewController = [[LeafletPageContentViewController alloc]initWithNibName:@"LeafletPageContentViewController" bundle:nil];
dataViewController.dataObject = [self.modelArray objectAtIndex:index];
return dataViewController;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With