1

我正在向 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;
}
4

2 回答 2

6

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

UIPageViewController 文档

于 2013-11-03T12:36:05.293 回答
0

两点:

  1. 最有可能的是,您添加到数组中的视图控制器之一是 nil。

(1b。不太可能,pvc 不是UIPageViewController。)

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

编辑:

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

鉴于错误消息,您需要实现以下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];
}

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

于 2013-11-03T12:18:36.003 回答