特定のページにジャンプする方法についていくつか質問を見つけましたが、UIPageViewController
ジャンプに関する追加の問題に気づきました。どの回答も認めていないようです。
私のiOSアプリ(ページングされたカレンダーに似ています)の詳細に立ち入ることなく、これが私が経験していることです。を宣言しUIPageViewController
、現在のView Controllerを設定し、データソースを実装します。
// end of the init method
pageViewController = [[UIPageViewController alloc]
initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
pageViewController.dataSource = self;
[self jumpToDay:0];
}
//...
- (void)jumpToDay:(NSInteger)day {
UIViewController *controller = [self dequeuePreviousDayViewControllerWithDaysBack:day];
[pageViewController setViewControllers:@[controller]
direction:UIPageViewControllerNavigationDirectionForward
animated:YES
completion:nil];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
NSInteger days = ((THDayViewController *)viewController).daysAgo;
return [self dequeuePreviousDayViewControllerWithDaysBack:days + 1];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
NSInteger days = ((THDayViewController *)viewController).daysAgo;
return [self dequeuePreviousDayViewControllerWithDaysBack:days - 1];
}
- (UIViewController *)dequeuePreviousDayViewControllerWithDaysBack:(NSInteger)days {
return [[THPreviousDayViewController alloc] initWithDaysAgo:days];
}
編集注:デキュー方法の簡略化されたコードを追加しました。この冒涜的な実装でも、ページの順序に関してまったく同じ問題があります。
初期化はすべて期待どおりに機能します。インクリメンタルページングもすべて正常に機能します。問題は、私がjumpToDay
もう一度電話をかけると、注文が混乱することです。
ユーザーが-5日目にいて、1日目にジャンプした場合、左にスクロールすると、適切な0日目ではなく-5日目が再び表示されます。これは、UIPageViewController
近くのページへの参照を維持する方法と関係があるようですが、私はできますキャッシュを強制的に更新するメソッドへの参照が見つかりません。
何か案は?