2013-11-03 94 views
1

我添加3个视图控制器到PageViewController,像这样:添加视图控制器到UIPageViewController

[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; 
} 

回答

0

两点:

  1. 最可能的是,你要添加到阵列的视图控制器之一是零。

(。1B大概少,PVC是不是UIPageViewController

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

编辑:

OK,所以我错过了明显的问题,所报告的例外 - 你只能有一个或两个视图控制器。

提供的错误消息,您需要实现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]; 
} 

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

+0

PVC是一种UIPageVieController,我保持按下继续按钮,并且误差上来作为这样的:“提供视图控制器的数量(3)不匹配所需要的数目(1),用于请求的脊柱位置(UIPageViewControllerSpineLocationMin)' – user2397282

+0

感谢Paul,我编辑了我的帖子,询问UIPageViewControllerDataSource方法。 – user2397282

6

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

UIPageViewController documentation

+0

噢好吧,那么你会推荐我使用什么?我有这三个视图控制器,我希望能够在它们之间滑动。我应该使用什么以及如何编写实现? – user2397282

+0

请参阅Paul Lynch编辑的关于实现UIPageViewControllerDataSource方法的响应。 – user1459524

相关问题