Вы всегда можете создать простой подкласс UINavigationController и обернуть методы его суперкласса, чтобы установить флаг перед их вызовом:
ActionNavigationController.h
#import <UIKit/UIKit.h>
@interface ActionNavigationController : UINavigationController
@property (nonatomic, readonly) BOOL pushing;
@end
ActionNavigationController.m
#import "ActionNavigationController.h"
@implementation ActionNavigationController
@synthesize pushing = _pushing;
-(void)pushViewController:(UIViewController *)viewController
animated:(BOOL)animated {
_pushing = YES;
[super pushViewController:viewController animated:animated];
}
- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
_pushing = NO;
return [super popViewControllerAnimated:animated];
}
- (NSArray *)popToViewController:(UIViewController *)viewController
animated:(BOOL)animated {
_pushing = NO;
return [super popToViewController:viewController animated:animated];
}
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated {
_pushing = NO;
return [super popToRootViewControllerAnimated:animated];
}
@end
Поскольку pushing
оценивает событие NO
, если ничего не происходит, ожидается, что этот код будет доступен из UINavigationControllerDelegate.