我的问题是我想调用transitionFromViewController:toViewController :::来更改容器视图中的视图控制器。但是如果第一个控制器不是以编程方式创建的,而是由故事板创建的,那么我如何获取它的句柄才能将其传递给transitionFromViewController?
更多详情:
我想在app启动时创建一个包含控制器A或控制器B的容器控制器,具体取决于从默认值中读取的标志。
在我的故事板中,我在初始控制器中放置了一个容器视图,当这样做时,IB会自动创建一个链接的VC场景,我将其设置为视图控制器A.
我还为视图控制器B创建了一个场景(但是无法将其链接到初始视图控制器,因为这样做会断开视图控制器A.因此我假设IB只允许一个VC连接到容器视图)。
在初始控制器的viewDidLoad中,我打算调用transitionToViewController,根据状态标志从控制器A切换到控制器B. 问题是如何获得控制器A的句柄?我没有在代码中创建控制器A,IB正在自动创建 - 所以我尝试在初始控制器中为它添加属性,但IB不允许我使用控制器A和属性之间的IB助手拖放链接。那么我怎么能得到它的句柄才能将它传递给transitionToViewController:?
答案 0 :(得分:0)
如果您在故事板上使用容器视图嵌入子控制器,那么您可以通过viewDidLoad中的以下代码获取子控制器
AController = [self.childViewControllers lastObject];
如果有多个子视图控制器,那么你可以迭代self.childViewControllers来查找每一个。
您可以实例化B Controller以调用transitionFromViewController
[self.storyboard instantiateViewControllerWithIdentifier:@"BController"];
然后你打电话给这样的话 。 。
[AController willMoveToParentViewController:nil];
[self addChildViewController:BController];
[self transitionFromViewController:AController
toViewController:BController
duration:0.0f
options:UIViewAnimationOptionTransitionNone
animations:^{
}
completion:^(BOOL finished) {
[BController didMoveToParentViewController:self];
[AController removeFromParentViewController];
}];