如果你在理解标题方面遇到一些麻烦,那么问题就在这里。
我在这里使用this库,它由IIViewDeckController
表示。
我使用简单的左侧和中间UIViewControllers
初始化它:
FTPhoneHomeViewController *home = [[FTPhoneHomeViewController alloc] init];
FTPhoneSideViewController *side = [[FTPhoneSideViewController alloc] init];
IIViewDeckController *vdc = [[IIViewDeckController alloc] initWithCenterViewController:home leftViewController:side];
[self.delegate changeRootViewController:vdc];
FTPhoneHomeViewController
和FTPhoneSideViewController
只是UIViewController
的子类。最后一行从窗口中删除当前rootViewController
并添加IIViewDeckController
。
现在在FTPhoneHomeViewController
我使用UIViewController
方法添加了另一个addChildViewController
:
FTTileViewController *tileViewController = [[FTTileViewController alloc] initWithFrame:CGRectMake(5.0, 50.0, 469.0, 310) tileData:[FTTileFaker prepareTileData] defaultTileConfig:[FTTileFaker prepareTileConfigs][0] andTileConfigs:[FTTileFaker prepareTileConfigs]];
tileViewController.tileSpacing = 9.0;
[self addChildViewController:tileViewController];
[self.view addSubview:tileViewController.view];
[tileViewController didMoveToParentViewController:self];
我这样做是因为这个FTTileViewController
管理着一堆瓷砖,从架构的角度来看,这个逻辑最好包含在它自己独立的UIViewController
中。
当我从窗口使用IIViewDeckController
作为rootViewController
时,viewWillAppear
中的FTTileViewController
事件未被调用。但它在FTPhoneHomeViewController
中被调用!现在,当我不使用IIViewDeckController
并只添加FTPhoneHomeViewController
作为窗口的rootViewController
时,我的FTTileViewController
确实获得viewWillAppear
个事件...
也许它是IIViewDeckController
的错误,我也应该在那里发布。但我不知道我在这里做错了什么。有人对此有什么想法吗?
如果有人可以查看UIViewControllers
周围的一般假设:
将childViewControllers
添加到另一个UIViewController
并非要求将视图周期方法(如viewWillAppear
)传递到另一个UIViewController's
视图。使用UIViewController's
方法添加其他addSubview
视图时会传递这些事件。但是,您可以使用addChildViewController
方法来获取轮换事件并通过应用程序维护viewController's
层次结构。
答案 0 :(得分:2)
好的回答我自己的问题:
在IIViewDeckController
中,您可以调整一些方法:
- (BOOL)shouldAutomaticallyForwardRotationMethods {
return YES;
}
- (BOOL)shouldAutomaticallyForwardAppearanceMethods {
return YES;
}
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
return YES;
}
从所有人那里返回YES,它应该有效。
如果IIViewDeckController
上没有此视图包含的属性,那么添加它可能会很好吗?