pageViewController viewControllerAfterViewController被调用两次

时间:2014-10-30 17:06:43

标签: ios uipageviewcontroller

希望这不是重复的。我尝试了在网上找到的其他解决方案,但似乎没有一个适合我的问题。

我有一个pageViewController,它使用滚动来显示3个tableViewControllers。 tableViewController保存索引,但pageViewController增加或减少它。

我遇到的问题是,当滚动到页面时,pageViewController数据源中的viewControllerAfterViewController被调用两次。这使得索引从0变为2,然后在向后滚动时从2变为1.

我已经尝试将我的pageViewController设置为委托,并使用didFinishAnimating:previousViewControllers方法,但这也显示乱搞索引,因为viewControllerAfterViewController方法是递增计数器两次的方法。

这是我的pageViewController代码:

- (TrendsTableViewController *)viewControllerAtIndex:(NSUInteger)index
{
    if ([arrayOfCharts count] == 0 || (index >= [arrayOfCharts count]))
        return nil;

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard_iPhone" bundle:nil];

    TrendsTableViewController *tableViewController = [storyboard instantiateViewControllerWithIdentifier:@"trends"];
    tableViewController.navigationController.navigationBarHidden = NO;
    tableViewController.pageIndex = index;

    switch (index)
    {
        case 0:
            self.title = @"Index 0";
            break;
        case 1:
            self.title = @"Index 1";
            break;
        case 2:
            self.title = @"Index 2";
            break;
    }
    return tableViewController;
}

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

    if ((index == 0) || (index == NSNotFound))
        return nil;

    index--;

    return [self viewControllerAtIndex:index];
}

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

    if (index == NSNotFound)
        return nil;

    index++;

    if (index == [arrayOfCharts count])
        return nil;

    return [self viewControllerAtIndex:index];
}

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
    return [arrayOfCharts count];
}

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
    return 0;
}

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
    TrendsTableViewController *viewController = [previousViewControllers objectAtIndex:0];
    NSUInteger index = viewController.pageIndex;
    NSLog(@"index finished = %lu" , index);
}

然后我的tableViewController只有这个属性来保存索引,但是根本不修改或使用它:

@interface TrendsTableViewController : UITableViewController
@property NSUInteger pageIndex;
@end

有关为什么这个方法被调用两次或者我可能做错了什么的任何想法? 我正在为iOS 6及更高版本进行编译。

更新 为了让事情变得更烦人,当我从"滚动"更改过渡样式时,此代码可以正常工作。到"页面卷曲"。 不知何故,"页面卷曲"工作正常,索引是正确的。唯一的问题是" Scroll"转型。

谢谢。

0 个答案:

没有答案