Sno*_*man 5 iphone objective-c ios5
我正在运行我的所有应用程序以确保它不仅仅是一个应用程序,并且在我拥有的每个应用程序中,当我在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];
Run Code Online (Sandbox Code Playgroud)
小智 16
这是-addSubview:方法.
在添加或删除视图控制器的视图时,必须有人调用视图控制器的"查看事件"方法,例如-viewWillAppear:等.
实际上,它不是-addSubview的推荐方法:/ - 在iOS 5之前自己查看控制器的视图控制器视图,因为它不会调用"查看事件"方法(您可以/应该自己调用它).相反,建议使用"间接"方式来执行此操作,例如-presentModalViewController:您使用(它代表您调用"查看事件"方法).
在iOS 5上,Apple改变了-addSubview的行为:/ - removeFromSuperView方法,允许直观视图管理视图控制器.所以现在,当你在viewController的视图中使用这些方法时,将自动调用'View Event'方法.
所以它被叫了两次.
看录像"实施的UIViewController遏制"在这里也.
Luk*_*man 10
因为您要显示两次视图.
首次将视图添加为当前视图的子视图:
[self.view addSubview:closeVC.view];
Run Code Online (Sandbox Code Playgroud)
第二次将视图的控制器推到当前视图的控制器之上:
[self presentModalViewController:closeVC animated:NO];
Run Code Online (Sandbox Code Playgroud)
我不确定为什么在iOS4 viewWillAppear中只调用一次,因为iOS5调用它是正确的两次,因为你正如上所述两次显示视图.
只需删除其中一条线就可以了(我建议删除addSubview并保留presentModalViewController一条).
如果要在视图控制器中恢复旧(iOS 4)行为,则应实现以下方法:
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
return NO;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6895 次 |
| 最近记录: |