将相同的类对象返回给UIPageViewController

时间:2012-11-03 11:07:57

标签: iphone ios cocoa-touch uipageviewcontroller

我已经使用UIPageViewController在webview中加载了大约5个图像。 所以每当下面的代码行

- (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; 

}

1 个答案:

答案 0 :(得分:0)

您无法在pageViewController:viewControllerAfterViewController中返回self,因为这会在视图控制器层次结构中产生一个循环。

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