2016-06-14 3 views
1

私は問題はIAMは何PageViewController http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/ を作成するため、このチュートリアルに従っているが、すべてが完璧PageViewControllerはページのインデックスを間違って表示していますか?

ているページのものの間違って残りの部分を取得ページインデックスが最後のインデックスであるならば、私のような何かをする必要があり、その後、私は持っていますボタンのラベルを変更します。

- (PageContentViewController *)viewControllerAtIndex:(NSUInteger)index 
{ 
    if (([self.pageImages count] == 0) || (index >= [self.pageImages count])) { 
     return nil; 
    } 

    // Create a new view controller and pass suitable data. 
    PageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"]; 
    pageContentViewController.imageFile = self.pageImages[index]; 
    pageContentViewController.titleText = self.pageTitles[index]; 

    pageContentViewController.pageIndex = index; 

    NSLog(@"INDEX : %lu", (unsigned long)index); 

    return pageContentViewController; 
} 

- (void)pageViewController:(UIPageViewController *)pageViewCntr didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed 
{ 
    NSInteger currentIndex = ((UIViewController *)self.pageViewController.viewControllers.firstObject).view.tag; 
    if (completed) pageControl.currentPage = currentIndex; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    NSInteger index = ((PageContentViewController *)viewController).pageIndex; 

    if (index == NSNotFound || !index) return nil; 
    NSLog(@"INDEX : %lu", (unsigned long)index); 
    return [self viewControllerAtIndex:index-1]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    NSInteger index = ((PageContentViewController *)viewController).pageIndex; 

    if (index == NSNotFound || index == pageCount-1) return nil; 
    NSLog(@"INDEX : %lu", (unsigned long)index); 
    return [self viewControllerAtIndex:index+1]; 
} 



- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController{ 

    return [self.pageImages count]; 

} 

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController{ 

    return 0; 
} 

多くの方法を試しましたが、問題を解決できませんでした。

ページの現在のインデックスを見つけるのを助けてください。ページの 指数は、私は1時間にスワイプするとき、それは一度私に0,1インデックスを返し、次のスワイプのためにそれは私に2を示し、次のスワイプのために、それは私に私が実装した

+0

、以下の回答を参照してください?いくつのページがありますか? –

+0

@SanketBhavsarこれは、左から右へ、右から左へと異なるインデックスを示しています。間違ったインデックスです –

+0

あなたはどのようにこのメソッドを呼び出していますか?それは何を返すのですか?あなたはそれが何を返すと思いますか? – Paulw11

答えて

1

任意のインデックスを返しません。現在表示されていません同じコードをデバッグした後、PageViewControllerDataSourceメソッドが2回呼び出されることを知りました。したがって、viewControllerBeforeViewControllerviewControllerAfterViewControllerの代わりにwillTransitionToViewControllersメソッドを使用して、適切なインデックスを取得することができます。

それが最後のページであるとき、何pageContentViewController.pageIndex印刷

PageViewController delegate functions called twice

+0

私はもう少し説明をしてくれます –

+0

'willTransitionToViewControllers'は、遷移が完了しない場合でも呼び出されますので、インデックスを追跡するためには使用しないでください。 –

関連する問題