viewWillAppear不会在iOS中调用

问题描述:

我创建了三个视图控制器,名为ABCC视图控制器是B视图控制器的子视图,同时执行A的视图被推送到BC的视图控制器委托方法viewWillAppear未调用。viewWillAppear不会在iOS中调用

+0

c视图控制器是否显示? – iPatel 2013-03-28 09:01:02

+1

请显示代码将C作为“子视图”添加到B的代码。如果您不将其添加为子视图控制器,则不会获得viewWillAppear消息。 – jrturton 2013-03-28 09:02:01

你说的是c的视图控制器是一个子视图B.

我假设你做这样的事情:

UIViewController *viewControllerB = [[UIViewController alloc] init]; 
UIViewController *viewControllerC = [[UIViewController alloc] init]; 

//add C's view to B 
[[viewControllerB view] addSubview:[viewControllerC view]]; 

如果是这样,那么你需要的viewController添加C作为一个孩子的viewController B的

//you need to set C to be a child view controller of B 
[viewControllerB addChildViewController:viewControllerC]; 

这应该确保正确调用相应的viewWill/viewDid方法。

+0

谢谢你这帮了我很多 – datha 2013-04-03 09:30:26

+0

不客气:] – CaptainRedmuff 2013-04-03 09:31:08

问题出在IOS版本。

同时加入了另一个视图控制器的视图(viewControllerC.view)作为副视点现有的视图控制器(viewControllerB)viewWillAppear:()和viewControllerC viewDidAppear:(),将不会触发在IOS 5.0早期版本。如果您需要呼叫,则通过检查设备ios版本手动调用此方法。

您可以检查IOS版本和手动调用委托方法是这样的...

[viewControllerB addSubview:viewControllerC.view]; 
if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) 
    { 
     [viewControllerC viewWillAppear:YES]; 
     [viewControllerC viewDidAppear:YES]; 
    }