未调用 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];

FTPhoneHomeViewControllerFTPhoneSideViewController 只是 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 未调用

调用 textFieldShouldBeginEditing,未调用 textFieldDidBeginEditing

JQuery:未捕获的类型错误:无法读取未定义的属性“调用”