所以在玩了很多之后,我得到了它的工作,就像我想象的那样。此时它没有过渡,但我想发布代码供其他人查看。
在故事板中,我有一个用于整个游戏的视图控制器,其中有一个视图容器和一个按钮。嵌入到游戏视图中的视图是一个页面控制器,它将包含不同类型的问题。然后故事板中未附加的是不同类型的问题布局,在我的例子中是 teamDisplay 和 locationDisplay。
在 QuestionViewController 中,我向 .h 文件添加了两个属性:
@property (nonatomic, strong) UIPageViewController *pageViewController;
@property (nonatomic, strong) NSMutableArray *questionTypeViewControllers;
声明了一个方法:
-(void)changeView;
在 .m 文件中,合成它们:
@synthesize questionTypeViewControllers,
pageViewController;
在 viewDidLoad 方法中:
pageViewController = [[UIPageViewController alloc]
initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
UIViewController *ldvc = [self.storyboard instantiateViewControllerWithIdentifier:@"locationDisplay"];
UIViewController *tdvc = [self.storyboard instantiateViewControllerWithIdentifier:@"teamDisplay"];
questionTypeViewControllers = [NSMutableArray arrayWithObjects:ldvc, tdvc, nil];
NSArray *initView = [NSArray arrayWithObject:ldvc];
[pageViewController setViewControllers:initView
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:nil];
[self addChildViewController:pageViewController];
[self.view addSubview:self.pageViewController.view];
然后实现了changeView方法:
NSArray *initView = [NSArray arrayWithObject: [questionTypeViewControllers objectAtIndex:1]];
[pageViewController setViewControllers:initView
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:nil];
在按钮所在的 GameViewController 中,为按钮添加一个动作,并从 QuestionViewController 中调用新创建的 changeView 方法。
- (IBAction)change:(id)sender {
// Need a more reliable way to get the QuestionViewController.
[[self.childViewControllers objectAtIndex:0] changeView];
}
就是这样。不费吹灰之力吧?!;)
我不知道这是否是正确的方法,但它奏效了。欢迎任何建议或改进。