希望这不是重复的。我尝试了在网上找到的其他解决方案,但似乎没有一个适合我的问题。
我有一个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"转型。
谢谢。