1

次のように RootViewControllerUIPageViewControllerのメソッドで設定したものがあります。viewDidLoad

[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];

デリゲートpageViewControllerspineLocationForInterfaceOrientationが正常に呼び出され、それに応じてスパインを設定できます。

ただし、ボタンのクリック時に PageViewController をセットアップしたいので、ボタンを押したイベントのイベント ハンドラーにコードを移動しました。現在、デリゲートは呼び出されていません。

どうすれば修正できますか?

4

1 に答える 1

1

やや複雑ですが、以下のコードで実現できます。

ステップ 1: 以下のコードを rootViewController の .h ファイルに追加します。

@property (strong, nonatomic) IBOutlet UIButton *previousClick;
@property (strong, nonatomic) IBOutlet UIButton *nextClick;

ステップ 2: 使用する xib またはストーリーボードにそれらを接続します。

ここに画像の説明を入力

ステップ 3: 2 つの IBAction メソッドを .m ファイルに追加します。

#pragma mark - IBAction Methods

- (IBAction)previousClick:(id)sender
{
    [_modelController pageViewController:self.pageViewController viewControllerBeforeViewController:_dataViewController];
}


- (IBAction)nextClick:(id)sender
{
    [_modelController pageViewController:self.pageViewController viewControllerAfterViewController:_dataViewController];
}

ステップ 4: 以下の行も .m ファイルに追加する必要があります

@interface RootViewController ()
@property (readonly, strong, nonatomic) ModelController *modelController;
@property (readonly, strong, nonatomic) DataViewController *dataViewController;
@end

そして、以下のように合成します

@synthesize modelController = _modelController;
@synthesize dataViewController = _dataViewController;

ステップ 5: 最後で最後の行の下に- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientationメソッドを追加します。

_dataViewController = currentViewController;

currentViewController の alloc init 呼び出しの後。

追加されたボタンが pageViewController によって非表示になっていることがわかった場合は、-viewDidLoadメソッド内で以下のコードを使用してそれらを前面に移動します

[self.view bringSubviewToFront:self.previousClick];
[self.view bringSubviewToFront:self.nextClick];
于 2013-01-12T09:53:08.327 に答える