将视图控制器添加到UIPageViewController

时间:2013-11-03 11:53:21

标签: ios uipageviewcontroller

我正在向PageViewController添加三个视图控制器,如下所示:

[pvc setViewControllers:[NSArray arrayWithObjects:svc, bvc, tvc, nil] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) { 

}];

然而,应用程序抛出异常并在此行停止。当我检查日志导航器时,它只是说'(lldb)'。出了什么问题?

编辑:好的,谢谢保罗。我对Objective-c很新;如何实现这些方法以在我的三个视图控制器之间滑动?

这是我在appDelegate.m中的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.;

UIPageViewController *pvc = [[UIPageViewController alloc] init]; // Create new PageViewController

BarsViewController *bvc = [[BarsViewController alloc] init]; // Create BarsViewController
StopwatchViewController *svc = [[StopwatchViewController alloc] init]; // Create StopwatchViewController
TimerViewController *tvc = [[TimerViewController alloc] init]; // Create TimerViewController

[pvc setViewControllers:[NSArray arrayWithObjects:svc, bvc, tvc, nil] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) {

}];

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; // Hide status bar

self.window.rootViewController = pvc; // Make tab bar controller the root view controller
[self.window makeKeyAndVisible];
return YES;
}

2 个答案:

答案 0 :(得分:6)

您无法将3个viewcontrollers添加到uipageviewcontroller。您可以添加一个viewcontroller,也可以最多添加两个,具体取决于脊椎位置的设置。 SetViewController是一个添加可见控制器的功能,2是您可以显示的最大值。查看下面的链接,SetViewController条目有一个图表,显示您可以添加哪些控制器,具体取决于脊柱位置。

UIPageViewController documentation

答案 1 :(得分:0)

两点:

  1. 最有可能的是,您要添加到阵列的视图控制器之一是nil。
  2. (1b。不太可能,pvc不是UIPageViewController。)

    1. 您需要查看异常详细信息; Xcode 5在这方面已经改变了行为,并且您可能为所有异常设置了断点。只需按几次继续按钮,它就会显示在控制台窗口中。
    2. 编辑:

      好的,所以我错过了一个明显的问题,正如异常所报告的那样 - 你只能有一个或两个视图控制器。

      鉴于错误消息,您需要实现UIPageViewControllerDataSource方法:

      NSArray *viewControllers = @[svc, bvc, tvc];
      
      - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
          NSInteger i = [viewControllers indexOfObject:viewController];
          if (i > 0) i = i - 1;
          return viewControllers[i];
      }
      
      - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
          NSInteger i = [viewControllers indexOfObject:viewController];
          if (i < ([viewControllers count] + 1)) i = i + 1;
          return viewControllers[i];
      }
      

      返回上一个和下一个控制器以支持分页。