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 步:在 .m 文件中添加两个 IBAction 方法。

#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 回答