1

次のように、3 つのビュー コントローラーを PageViewController に追加しています。

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

}];

ただし、アプリは例外をスローし、この行で停止します。ログナビゲーターを確認すると、「(lldb)」とだけ表示されています。何がうまくいかないのですか?

編集:わかりました、ポールに感謝します。私はObjective-cにまったく慣れていません。これらのメソッドを実装して、3 つのビュー コントローラー間でスワイプを取得するにはどうすればよいでしょうか?

これは 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 に追加することはできません。スパインの位置の設定に応じて、ビューコントローラーを 1 つ、または最大 2 つ追加できます。SetViewController は可視コントローラを追加する関数で、表示できる最大値は 2 です。以下のリンクを確認してください。SetViewController のエントリには、スパインの位置に応じて追加できるコントローラーを示すチャートがあります。

UIPageViewController ドキュメント

于 2013-11-03T12:36:05.293 に答える
0

2 つのポイント:

  1. ほとんどの場合、配列に追加するビュー コントローラーの 1 つが nil です。

(1b. 可能性は低いですが、pvc は ではありませんUIPageViewController。)

  1. 例外の詳細を確認する必要があります。Xcode 5 ではこの点に関して動作が変更されており、すべての例外に対してブレークポイントが設定されている可能性があります。続行ボタンを数回押すだけで、コンソール ウィンドウに表示されます。

編集:

OK、例外で報告されているように、1 つまたは 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];
}

ページネーションをサポートするために前と次のコントローラを返します。

于 2013-11-03T12:18:36.003 に答える