【发布时间】:2014-07-28 15:00:25
【问题描述】:
这可能看起来像以前提出的问题 (PageViewController delegate functions called twice),但问题是我无法将该解决方案应用于我的问题。
您可能会注意到,我正在开发一个日历应用程序并使用 UIPageViewController 来管理我的年度日历显示。如您所见,我正在使用 UIPageViewControllerTransitionStylePageCurl 并且当用户卷曲页面(向前/向后)时,他们各自的委托被调用两次,这使我根据执行的委托增加或减少 2 年。现在我需要找出导致此问题的原因并阻止它执行两次。
我知道在这些委托中返回一个 viewController 很重要,它提供了我的下一页或上一页,因此我只是刷新 viewController 的视图,以便我可以使用新数据呈现视图。我还尝试了另一个名为 willTransitionToViewControllers 的委托,但不会让我到任何地方,因为 willTransitionToViewControllers 只会在之后执行 viewControllerAfterViewController 和 viewControllerBeforeViewController。
有人帮我理解和解决这个问题。
- (void)addCalendarViews
{
CGRect frame = CGRectMake(0., 0., self.view.frame.size.width, self.view.frame.size.height);
pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:UIPageViewControllerSpineLocationNone] forKey:UIPageViewControllerOptionSpineLocationKey]];
pageViewController.doubleSided = YES;
pageViewController.delegate = self;
pageViewController.dataSource = self;
YearCalendarViewController *yearController = [[YearCalendarViewController alloc] init];
NSArray *viewControllers = [NSArray arrayWithObject:yearController];
[self.pageViewController setViewControllers:viewControllers
direction:UIPageViewControllerNavigationDirectionReverse
animated:YES
completion:nil];
[self addChildViewController:pageViewController];
[self.view addSubview:pageViewController.view];
[pageViewController didMoveToParentViewController:self];
CGRect pageViewRect = yearController.view.bounds;
self.pageViewController.view.frame = pageViewRect;
viewCalendarMonth = [[SGMonthCalendarView alloc] initWithFrame:frame];
[self.view addSubview:viewCalendarMonth];
arrayCalendars = @[pageViewController.view, viewCalendarMonth];
}
-(UIViewController*)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSDate *currentDate = [[SGSharedDate sharedManager] currentDate];
NSDateComponents *currentDateComp = [NSDate returnDateComponentsForDate:currentDate];
self.nextDate = [NSDate dateWithYear:currentDateComp.year+1 month:currentDateComp.month day:currentDateComp.day];
[[SGSharedDate sharedManager] setCurrentDate:nextDate];
{
//I m reloading viewController's view here to display the new set of data for the increamented date.
}
NSLog(@"After Dates====>%@", nextDate);
return viewController;
}
-(UIViewController*)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSDate *currentDate = [[SGSharedDate sharedManager] currentDate];
NSDateComponents *currentDateComp = [NSDate returnDateComponentsForDate:currentDate];
nextDate = [NSDate dateWithYear:currentDateComp.year-1 month:currentDateComp.month day:currentDateComp.day];
[[SGSharedDate sharedManager] setCurrentDate:nextDate];
{
//I m reloading viewController's view here to display the new set of data for the decremented date.
}
NSLog(@"Before Dates====>%@", nextDate);
return viewController;
}
【问题讨论】:
-
你在哪里定义
nextDateComp?你的意思是写currentDateComp? -
抱歉,这是我编辑此问题时的排版错误。我会立即编辑它。