UIPageViewController索引无法正常工作

时间:2015-06-11 07:16:22

标签: ios indexing uipageviewcontroller uipagecontrol pagecontrol

基本上,我正在制作一个使用UIPageViewController的页面应用程序。当用户滚动页面时,他们可以看到不同的内容。现在的问题是,当我滚动页面时,第一页和第二页正常工作,索引是正确的。但是当我滚动到第三页时,索引保持在" 1",之后不会改变。另一页保留第二页的外观,其索引为" 1"。

我正在关注教程:http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/

我的代码:

查看Controller.h

#import <UIKit/UIKit.h>
#import "PageContentViewController.h"
#import "PageViewController.h"

@interface ViewController : UIViewController<UIPageViewControllerDataSource, UIPageViewControllerDelegate>

@property (strong, nonatomic) PageViewController *pageViewController;
@property (strong, nonatomic) NSArray *pageTitles;


@end

查看Controller.m:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.pageTitles = @[@"First Page", @"Second Page", @"Third Page"];

    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
    self.pageViewController.dataSource = self;

    if ([self.pageTitles count])
    {
        PageContentViewController *startingViewController = [self viewControllerAtIndex: 0];

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

        self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
        [self addChildViewController:self.pageViewController];
        [self.view addSubview:self.pageViewController.view];
        [self.pageViewController didMoveToParentViewController:self];
    }
}

- (PageContentViewController *) viewControllerAtIndex: (NSUInteger)index{
    if (index < [self.pageTitles count])
    {
        PageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"];

        pageContentViewController.titleText = self.pageTitles[index];

        NSLog(@"%li", index);

        UIColor *backgroundColor;
        switch (index) {
            case 0:
                backgroundColor = [UIColor greenColor];
                break;

            case 1:
                backgroundColor = [UIColor blueColor];
                break;

            case 2:
                backgroundColor = [UIColor purpleColor];
                break;

            default:
                break;
        }

        pageContentViewController.backgroundColor = backgroundColor;
        return pageContentViewController;
    }

    return nil;
}

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


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

    index++;

    if (index == [self.pageTitles count])
    {
        return nil;
    }

    return [self viewControllerAtIndex:index];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger index = ((PageContentViewController *)viewController).pageIndex;
    if (index == 0 || index == NSNotFound)
    {
        return nil;
    }

    index--;

    return [self viewControllerAtIndex:index];
}

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

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

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

页面内容查看Controller.h

#import <UIKit/UIKit.h>

@interface PageContentViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIView *backgroundView;
@property (weak, nonatomic) IBOutlet UILabel *titleLable;

@property (nonatomic) NSUInteger pageIndex;

@property (strong, nonatomic) NSString *titleText;
@property (strong, nonatomic) UIColor *backgroundColor;

@end

页面内容查看Controller.m

#import "PageContentViewController.h"

@interface PageContentViewController ()

@end

@implementation PageContentViewController

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

    self.titleLable.text = self.titleText;
    [self.backgroundView setBackgroundColor:self.backgroundColor];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end

1 个答案:

答案 0 :(得分:0)

viewControllerAtIndex:中,您需要设置pageIndex的{​​{1}}属性值:

pageContentViewController