上面的答案略有不完整。 假設您有2個視圖控制器,ControllerA和ControllerB。
ControllerA.view已添加到窗口(它是父窗口),並且您想將ControllerB.view添加爲ControllerA的子視圖。
如果您沒有首先將ControllerB作爲ControllerA的子級添加,則自動ForwardAppearanceAndRotationMethodsToChildViewControllers將被忽略,並且您仍然會被iOS5調用,這意味着您將調用您的視圖控制器回調兩次。
實施例ControllerA:
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
return NO;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.controllerB = [[ControllerB alloc] initWithNibName:@"ControllerB" bundle:nil];
[self.view addSubview:self.controllerB.view];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.controllerB viewWillAppear:animated];
}
在ControllerB NSLogging在viewWillAppear中:
- (void)viewWillAppear:(BOOL)animated
{
NSLog("@ControllerB will appear");
}
這將導致只的iOS5顯示該消息的NSLog兩次。即您自動ForwardAppearanceAndRotationMethodsToChildViewControllers已被忽略。
爲了解決這個問題,您需要添加controllerB作爲控制器a的子項。
早在ControllerA的類:
- (void)viewDidLoad
{
[super viewDidLoad];
self.controllerB = [[ControllerB alloc] initWithNibName:@"ControllerB" bundle:nil];
if ([self respondsToSelector:@selector(addChildViewController:)])
[self addChildViewController:self.controllerB];
[self.view addSubview:self.controllerB.view];
}
這將現在的工作預期在這兩個iOS4的和iOS5的,而不訴諸檢查的iOS版本字符串的可怕的黑客,而是檢查。如果函數我們之後可用。
希望這會有所幫助。
正如你已經發現,大約只有10%的的iOS 4和iOS 5之間的變化被明確記載。 –