【问题标题】:UIPageViewController doesn't change pageUIPageViewController 不改变页面
【发布时间】:2014-01-30 23:17:01
【问题描述】:

我有一个实现 UIPageViewControllerDataSource 委托的视图控制器,它包含一个 UIPageViewController。

我的问题是,经过 3 个小时的教程和阅读,我仍然不明白为什么 UIPageController 会通过移动其内容来响应滑动,但如果滚动足够,它不会改变页面。总是卡在第一页。

这是我的 .h 文件

#import <UIKit/UIKit.h>
@interface BreathePageViewController : UIViewController <UIPageViewControllerDataSource> 
@property (strong, nonatomic) UIPageViewController *pageController;
@end

这是我的 .m 文件

#import "BreathePageViewController.h"
#import "FirstViewController.h"
#import "SecondViewController.h.h"



@interface BreathePageViewController () {
    NSArray *pageViewControllerScreens;
    FirstViewController *firstViewController;
    SecondViewController *secondViewController;
    int pageIndex;
}

@end

@implementation BreathePageViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

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

    self.pageController.dataSource = self;
    [[self.pageController view] setFrame:[[self view] bounds]];

    [self.pageController setViewControllers:@[firstViewController] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
    [self.view addSubview:self.pageController.view];
    [self addChildViewController:self.pageController];
    [[self view] addSubview:[self.pageController view]];
    [self.pageController didMoveToParentViewController:self];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    if (pageIndex == 0) {
        return nil;
    }
    pageIndex--;
    return [self viewControllerAtIndex:pageIndex];   
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    if (pageIndex == 2) {
        return nil;
    }
    pageIndex++;        
    return [self viewControllerAtIndex:pageIndex];
}

- (UIViewController *)viewControllerAtIndex:(NSUInteger)index {

    UIViewController *vc;

    if (pageIndex == 0 ) {
        vc = [[FirstViewController alloc] init];
    }
    else if (pageIndex == 1) {
        vc = [[SecondViewController alloc] init];
    }

    return vc;

}

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController {
    return 2;
}

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


@end

现在奇怪的是 pageViewController:viewControllerAfterViewController 从未被调用过。 有人可以帮我吗? 谢谢

【问题讨论】:

    标签: ios iphone objective-c uipageviewcontroller


    【解决方案1】:

    睡了一夜之后,我要回答我自己的问题了。

    我不知道为什么(感谢任何评论),但问题不在那个视图控制器上,而是在我创建它的那个控制器上。

    在父视图控制器中,我像这样构建 UIPageViewController:

    BreathePageViewController  *pageController = [[BreathePageViewController alloc] init];
    [pageController.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.view addSubview:pageController.view];
    

    现在我尝试将 pageViewController 的声明移动为 iVar。它有效。 希望能帮助到别人

    【讨论】:

    • 如果您使用的是 ARC pageController,则本地 var 在将其视图添加到 self.view 层次结构后立即被释放。在 dealloc 过程中,委托被设置为 nil。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多