这只是在ios6上开始发生,但是如果你使用页面视图控制器模板启动一个新项目.然后进去
PCRootViewControlle::viewDidLoad()
Run Code Online (Sandbox Code Playgroud)
将行添加到方法的底部.
for (UIGestureRecognizer *gR in self.pageViewController.gestureRecognizers)
{
gR.delegate = self;
}
Run Code Online (Sandbox Code Playgroud)
您需要分配viewController以使其符合UIGestureRecognizerDelegate并实现该方法
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch (UITouch *)touch
{
return YES;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您运行应用程序并尝试将页面超出界限,即转到1月并尝试返回
返回零.
该应用程序将崩溃.
ios5没有发生这种情况.我需要将gestureRecognizer委托分配给我的viewController,因为我并不总是希望pageViewController处理触摸事件.
有没有其他人经历过这个或指出如果我做错了什么?
非常感谢斯图尔特.
当用户在a的第一页UIPageViewController并尝试返回时,我只返回nil.在iOS 5中,这很好用.它导致iOS 6崩溃.
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The number of view controllers provided (0) doesn't match the number required (1) for the requested transition'
Run Code Online (Sandbox Code Playgroud)
这是我的代码.当返回contentViewController而不是nil,它工作正常.我该nil怎么办呢?
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController {
contentViewController = [[ContentViewController_iPhone alloc] init];
int currentIndex = [self.modelArray indexOfObject:[(ContentViewController_iPhone *)viewController labelContents]];
if ((currentIndex == 0) || (currentIndex == NSNotFound)) {
//if on the first page, can't go back
return nil;
}
contentViewController.labelContents = [self.modelArray …Run Code Online (Sandbox Code Playgroud) 我已经烧了几个小时.我已经初始化UIPageViewController用UIPageViewControllerNavigationOrientationHorizontal,但由于某种原因viewControllerBeforeViewController被称为当用户锅垂直.
此外,当发生这种情况时,没有页面翻转,didFinishAnimating:didFinishAnimating:previousViewControllers:transitionCompleted根本不会被调用.这意味着页面视图控制器知道这是一个垂直运动..
这是初始化代码 -
- (void)initPageViewController
{
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
self.pageViewController.delegate = self;
self.pageViewController.dataSource = self;
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
// Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages.
self.pageViewController.view.frame = self.view.bounds;
[self.pageViewController didMoveToParentViewController:self];
// Leave only pan recognizers enabled, so buttons positioned inside a page would work.
for (UIGestureRecognizer *gr in self.pageViewController.gestureRecognizers)
{ …Run Code Online (Sandbox Code Playgroud)