viewWillAppear来自未调用的IIViewDeckController的中心viewController的childViewController

时间:2013-08-23 07:54:44

标签: ios objective-c uiviewcontroller viewdeck iiviewdeckcontroller

如果你在理解标题方面遇到一些麻烦,那么问题就在这里。 我在这里使用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];

FTPhoneHomeViewControllerFTPhoneSideViewController只是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层次结构。

1 个答案:

答案 0 :(得分:2)

好的回答我自己的问题:

IIViewDeckController中,您可以调整一些方法:

- (BOOL)shouldAutomaticallyForwardRotationMethods {
    return YES;
}

- (BOOL)shouldAutomaticallyForwardAppearanceMethods {
    return YES;
}

- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
    return YES;
}

从所有人那里返回YES,它应该有效。 如果IIViewDeckController上没有此视图包含的属性,那么添加它可能会很好吗?