gpt4 book ai didi

ios - UIPageViewController 不改变页面

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:16:51 45 4
gpt4 key购买 nike

我有一个 View Controller 实现了 UIPageViewControllerDataSource 委托(delegate),它包含一个 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 从未被调用。有人可以帮我吗?谢谢

最佳答案

经过一夜的 sleep ,我要回答我自己的问题。

我不知道为什么(任何评论表示赞赏),但问题不在那个 View Controller 上,而是在我创建它的那个 View Controller 上。

在父 View Controller 中,我是这样构建 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。它有效。希望能帮助到别人

关于ios - UIPageViewController 不改变页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21469501/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com