未调用 IIViewDeckController 的中心 viewController 的 childViewController 上的 viewWillAppear
Posted
技术标签:
【中文标题】未调用 IIViewDeckController 的中心 viewController 的 childViewController 上的 viewWillAppear【英文标题】:viewWillAppear on a childViewController from the center viewController of a IIViewDeckController not called 【发布时间】:2013-08-23 07:54:43 【问题描述】:好的,如果您在理解标题时遇到问题,那就是问题所在。
我在这里使用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
中,我使用addChildViewController
方法添加另一个UIViewController
:
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
时,不会调用FTTileViewController
中的viewWillAppear
事件。但它在FTPhoneHomeViewController
中被调用!现在,当我不使用IIViewDeckController
而只是将FTPhoneHomeViewController
添加为窗口的rootViewController
时,我的FTTileViewController
确实会收到viewWillAppear
事件...
也许这是IIViewDeckController
的一个错误,我也应该在那里发布。但我看不出我在这里做错了什么。有人对此有任何想法吗?
如果有人可以检查我对UIViewControllers
的一般假设:
将childViewControllers
添加到另一个UIViewController
并不是将视图循环方法(如viewWillAppear
)传递到另一个UIViewController's
视图的必要条件。当您使用 addSubview
方法添加另一个 UIViewController's
视图时,会传递这些事件。但是,例如,您使用 addChildViewController
方法来获取旋转事件并通过您的应用程序维护 viewController's
层次结构。
【问题讨论】:
【参考方案1】:可以回答我自己的问题:
在IIViewDeckController
中有一些方法可以调整:
- (BOOL)shouldAutomaticallyForwardRotationMethods
return YES;
- (BOOL)shouldAutomaticallyForwardAppearanceMethods
return YES;
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
return YES;
从所有这些中返回 YES,它应该可以工作。
如果IIViewDeckController
上没有此视图包含的属性,是否可以添加它?
【讨论】:
刚从创作者那里得到消息,这将在下一个主要版本中修复!以上是关于未调用 IIViewDeckController 的中心 viewController 的 childViewController 上的 viewWillAppear的主要内容,如果未能解决你的问题,请参考以下文章
iiview 甲板控制器在呈现模态视图时更改框架而不更改界面方向
未完全加载单元格时未调用 didSelectItemAtIndexPath
numberOfRowsInSection 已调用但 cellForRowAt 未调用