2012-11-03 78 views
0

我已经使用UIPageViewController在webview中加载5个图像。 所以,只要下面的代码行返回相同的类对象到UIPageViewController

- (UIViewController *)pageViewController:(UIPageViewController *) pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 

,被调用时,返回的对象是类对象(在我的情况的类名是LoadPage)。在我的代码中一切正常,但我在这里面临一些奇怪的问题,并且有点不舒服。

所以我打算搬到单班而不是两个。

现在,此方法的返回类型将为self。

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    return self; 

} 

对吗?

但是,当我尝试初始化UIPageViewController时,应用程序崩溃在一个特定的行。

- (void) createViewControllers { 

    self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options: nil]; 

    pageViewController.delegate = self; 
    pageViewController.dataSource = self; 

    NSArray* nextScreens = [NSArray arrayWithObject:self]; 
    [pageViewController setViewControllers: nextScreens direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 

    [self addChildViewController:pageViewController]; 
    [self.view addSubview:pageViewController.view]; 
    [[self view] addSubview:[pageViewController view]];  //CRASH 
    [pageController didMoveToParentViewController:self]; 

    CGRect pageViewRect = self.view.bounds; 
    pageViewRect = CGRectInset(pageViewRect,0, 0); 
    pageViewController.view.frame = pageViewRect;  

    self.view.gestureRecognizers = pageViewController.gestureRecognizers; 

} 

回答

0

不能在pageViewController:viewControllerAfterViewController返回自我,因为这会在视图控制器层次生产周期。

您将pageViewController作为子视图控制器添加到self,然后稍后将pageViewController作为子视图控制器(页面)添加到自身。那是不允许的!

+0

所以你的意思是,如果我使用UIPageViewController,我需要使用另一个类即ViewController是强制性的? – Cyril

+0

当然是。将根视图控制器作为孩子添加到孩子身上是愚蠢的。 – Felix

+0

将pageViewController设置为window.rootViewController并在应用程序委托中实现委托是一种很好的做法。 – Felix