viewWillDisappear和viewDidDisappear永远不会被调用

我创build了我自己的PopoverController类(没有UIPopoverController的子类),以我想要的方式呈现ViewControllers。

CustomPopoverController不是一个UIViewController,而是它有一个名为“contentViewController”的实际上将显示的VC。

我实现了我自己的“dismissPopoverAnimated:”来closures我的自定义popup窗口,当用户点击contentViewController框架之外的任何地方时:

-(void) dismissPopoverAnimated : (BOOL) animated { // dismissalView is the view that intercept the taps outside. [self.dismissalView removeFromSuperview]; self.dismissalView = nil; if (animated) { CGRect newFrame = self.view.frame; // When in landscape Mode the width of the screen is actually the "height" newFrame.origin.y = [UIScreen mainScreen].bounds.size.width; [UIView animateWithDuration:0.5 animations:^{self.view.frame = newFrame;} completion: ^(BOOL finished) {if(finished) [self.contentViewController.view removeFromSuperview];}]; } else { [self.contentViewController.view removeFromSuperview]; } isPresented = NO; [self.delegate customPopoverDidDismissPopover:self]; } 

问题是,即使在任何情况下调用removeFromSuperView – animation与否, contentViewController永远不会收到viewWillDisappearviewDidDisappear ,甚至viewDidUnload当我释放contentViewController ;

有没有人有一个想法,为什么? 或者更好地抛出一些viewWill … / viewDid …方法,以及什么时候应该被调用。

当您通过UIView的方法添加子视图或删除子视图时,它永远不会导致拥有的UIViewController调用viewWillAppearviewDidAppearviewWillDisappearviewDidDisapper 。 只有那些由UINavigationController的方法pipe理的viewController,比如pushViewController:animated:或者popViewControllerAnimated:或者presentModelViewController:aniamted: …等。他们会通知控制器视图的状态正在改变。