viewWillDisappear e viewDidDisappear nunca são chamados
Criei minha própria classe para o PopoverController (sem subclassificar UIPopoverController) para apresentar os ViewControllers da maneira que eu quer
CustomPopoverController NÃO é um UIViewController, mas sim um ivar chamado "contentViewController", que é o VC que realmente será exibido.
Implementei meu próprio "unlockPopoverAnimated:" para descartar meu popover personalizado quando o usuário toca em qualquer lugar fora do quadro 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];
}
O problema é que, emboraremoveFromSuperView
é chamado em qualquer caso - animado ou não, ocontentViewController
nunca recebeviewWillDisappear
, viewDidDisappear
ou mesmoviewDidUnload
quando estou lançando ocontentViewController
;
Alguém tem uma idéia do porquê? Ou melhor ainda, lançar alguma luz sobre a cadeia de métodos viewWill ... / viewDid ... e quando eles deveriam ser chamados.