Da documentação da Apple em UIViewController.h:
"Esses quatro métodos podem ser usados nos retornos de chamada de aparência de um controlador de exibição para determinar se ele está sendo apresentado, dispensado ou adicionado ou removido como um controlador de exibição filho. Por exemplo, um controlador de exibição pode verificar se está desaparecendo porque foi descartado ou apareceu perguntando-se em seu método viewWillDisappear:, verificando a expressão ([self isBeingDismissed] || [self isMovingFromParentViewController]). "
- (BOOL)isBeingPresented NS_AVAILABLE_IOS(5_0);
- (BOOL)isBeingDismissed NS_AVAILABLE_IOS(5_0);
- (BOOL)isMovingToParentViewController NS_AVAILABLE_IOS(5_0);
- (BOOL)isMovingFromParentViewController NS_AVAILABLE_IOS(5_0);
Então, sim, a única maneira documentada de fazer isso é a seguinte:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
if ([self isBeingDismissed] || [self isMovingFromParentViewController]) {
}
}
Versão Swift 3:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if self.isBeingDismissed || self.isMovingFromParentViewController {
}
}