2

UIPageViewControllerが表示するUIViewControllersにUIPageViewController準拠し、それを管理するクラスがあります。UIPageViewControllerDataSourceページのめくりがユーザーによって開始された場合、すべてが正常に実行されます。しかし今、私はそれをプログラムでやりたいと思っています。

ここSOには、静的な量のViewControllerに関する質問に答える非常によく似た質問があることがわかりました。UIPageViewControllerでプログラムでページをめくることができますか?

しかし、UIPageViewControllerDataSourceの使用に答えを適応させることができません。私は次のようなものがあるに違いないと思っていました:

- (void)setCurrentViewController:(UIViewController *)viewController

ここで何かを見落としているだけだと思います。

4

3 に答える 3

9

回答(setViewControllers:direction:animated:completion:)に記載されている方法は、現在のView Controllerを設定し、まさに必要なものです。ビューコントローラを定義する最初のパラメータを使用して、表示します。背表紙がない場合は1つを使用し、予約が左/右の場合は2つを使用します。

于 2012-08-13T16:26:29.790 に答える
2

古い質問ですが、次の実装では、前のページまたは次のページに移動するためにデリゲートメソッドとdataSourceメソッドを呼び出します(ただし、デリゲートまたはdataSourceが設定されているかどうかはチェックしません)。

- (IBAction)navigateReverse:(id)sender
{
    UIViewController *controller = [self.dataSource pageViewController:self viewControllerBeforeViewController:self.designViewControllers[self.currentIndex]];

    if (!controller)
    {
        return;
    }

    NSArray *newViewControllers = @[controller];

    NSArray *previousViewControllers = self.viewControllers;

    __weak __typeof(self) weakSelf = self;

    [self.delegate pageViewController:self willTransitionToViewControllers:newViewControllers];
    [self setViewControllers:newViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) {
        [weakSelf.delegate pageViewController:weakSelf didFinishAnimating:finished previousViewControllers:previousViewControllers transitionCompleted:finished];
    }];
}

- (IBAction)navigateForward:(id)sender
{
    UIViewController *controller = [self.dataSource pageViewController:self viewControllerAfterViewController:self.designViewControllers[self.currentIndex]];

    if (!controller)
    {
        return;
    }

    NSArray *newViewControllers = @[controller];

    NSArray *previousViewControllers = self.viewControllers;

    __weak __typeof(self) weakSelf = self;

    [self.delegate pageViewController:self willTransitionToViewControllers:newViewControllers];
    [self setViewControllers:newViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) {
        [weakSelf.delegate pageViewController:weakSelf didFinishAnimating:finished previousViewControllers:previousViewControllers transitionCompleted:finished];
    }];
}
于 2015-02-04T23:12:44.583 に答える
1

その機能を備えた簡単なプロジェクトを作成しました。

https://github.com/delarcomarta/AMPageViewController

これがお役に立てば幸いです。

于 2015-10-14T10:41:44.127 に答える