Из документации Apple в UIViewController.h:
«Эти четыре метода могут использоваться в обратных вызовах внешнего вида контроллера представления, чтобы определить, будет ли он представлен, отклонен, добавлен или удален как дочерний контроллер представления. Например, контроллер представления может проверить, исчезает ли он, потому что он был отклонен или выскочил, спросив себя в своем viewWillDisappear: метод, проверив выражение ([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);
Так что да, единственный документированный способ сделать это заключается в следующем:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
if ([self isBeingDismissed] || [self isMovingFromParentViewController]) {
}
}
Версия Swift 3:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if self.isBeingDismissed || self.isMovingFromParentViewController {
}
}