2

iPadアプリにUIPageViewControllerを実装しました。ただし、iPadが縦向きの場合はすべてのページを表示できますが、iPadが横向きの場合は最後のページを表示できません。また、縦向きの最後のページにいて横向きに変更すると、アプリがクラッシュします。次のエラー:

キャッチされなかった例外'NSInternalInconsistencyException'が原因でアプリを終了しています、理由:'提供されたビューコントローラーの数(1)が、要求されたスパインの場所(UIPageViewControllerSpineLocationMid)に必要な数(2)と一致しません' </ p>

2ページ必要で1ページしかないからです。

前の例外を回避するために、「本」のページ数が奇数(たとえば、7)の場合はどうすればよいですか?

4

2 に答える 2

4

修正方法はこんな感じです。

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    DSBookletPageViewController *currentVC = (DSBookletPageViewController *)viewController;
    NSUInteger currentIndex = [currentVC index];

    if(currentIndex >= self.modelArray.count-1) {
        if (currentIndex %2 == 0 && !isPortrait) {
            //return an empty one
            DSBookletPageViewController *newVC = [[DSBookletPageViewController alloc] init];

            [newVC setIndex:currentIndex+1];

            return newVC;
        } else {
            return nil;
        }
    }

    currentIndex ++;

    UIImage *currentPage = [self.modelArray objectAtIndex:currentIndex];
    DSBookletPageViewController *newVC = [[DSBookletPageViewController alloc] initWithImage:currentPage andOrientation:isPortrait];
    [newVC setIndex:currentIndex];

    return newVC;
}

モデル配列の外部のUIPageViewControllerに別のページを追加しているので、基本的に配列の最後にいるか、それを超えているかを確認します。私がそこにいて、現在のインデックスが偶数で、縦向きでない場合は、ページを追加します。そうでない場合は、nilを返します。

それがお役に立てば幸いです。

于 2012-05-28T18:30:19.297 に答える
0

ここで私の答えを見てください。基本的にあなたの場合UIPageViewControllerDataSource、ビューが最初に表示されるときに表示されないすべてのページのコンテンツを提供するを設定する必要があります。

于 2012-05-29T10:03:04.957 に答える