我正在运行我的所有应用程序,以确保它不仅仅是一个应用程序,并且在我拥有的每个应用程序中,当我在 iOS5 模拟器或设备上运行时,viewWillAppear
方法在每个视图上被调用两次。我有一个简单的NSLog(@"1");
,并且每次都会在我的控制台中出现两次。这只是我一个人的情况,还是有什么事情发生? (在 iOS4 中只被调用一次)
这是调用两次 viewWillAppear 的视图的代码:
CloseDoorViewController *closeVC;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
closeVC = [[ CloseDoorViewController alloc] initWithNibName:@"CloseDoorViewIpad" bundle:nil];
} else {
closeVC = [[ CloseDoorViewController alloc] initWithNibName:@"CloseDoorViewController" bundle:nil];
}
[self.view addSubview:closeVC.view];
[self presentModalViewController:closeVC animated:NO];
这是 -addSubview: 方法。
添加或删除视图控制器的视图时,必须调用视图控制器的“视图事件”方法,例如 -viewWillAppear: 等。
实际上,在 iOS 5 之前,不建议您自行 -addSubview:/-removeFromSuperView 视图控制器的视图,因为它不会调用“View Event”方法(您可以/应该自己调用它)。相反,建议使用“间接”方式来执行此操作,例如您使用的 -presentModalViewController: (它确实代表您调用“View Event”方法)。
在 iOS 5 上,Apple 更改了 -addSubview:/-removeFromSuperView 方法的行为,以允许视图控制器的直接视图管理。所以现在,当您在 viewController 的视图上使用这些方法时,将自动调用“View Event”方法。
所以它被调用了两次。
请参阅视频“实现 UIViewController 遏制”here also.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)