De la documentación de Apple en UIViewController.h:
"Estos cuatro métodos se pueden usar en las devoluciones de llamada de apariencia de un controlador de vista para determinar si se está presentando, descartando o agregando o eliminando como un controlador de vista secundario. Por ejemplo, un controlador de vista puede verificar si está desapareciendo porque se descartó o apareció preguntándose en su método viewWillDisappear: comprobando la expresión ([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);
Entonces, sí, la única forma documentada de hacer esto es la siguiente:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
if ([self isBeingDismissed] || [self isMovingFromParentViewController]) {
}
}
Versión Swift 3:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if self.isBeingDismissed || self.isMovingFromParentViewController {
}
}