글쎄, 난 당신을 위해 당신의 viewcontrollers에 어떤 코드를 작성하고 싶지 않아 해키 한 방법이있다. 아래 내 카테고리를 확인하기위한 당신
UINavigationController가 + PushNotifier.h
#import <UIKit/UIKit.h>
@interface UINavigationController (PushNotifier)
extern void PJSwizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector);
@end
UINavigationController가 + PushNotifier.m
#import "UINavigationController+PushNotifier.h"
#import <objc/runtime.h>
@implementation UINavigationController (PushNotifier)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
PJSwizzleMethod([self class],
@selector(pushViewController:animated:),
@selector(pj_pushViewController:animated:));
});
}
- (void)pj_pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
//notify your Application Delegate
[[NSNotificationCenter defaultCenter] postNotificationName:@"ViewControllerWillPush" object:nil userInfo:@{@"pushingViewController":viewController}];
return [self pj_pushViewController:viewController animated:animated];
}
@end
void PJSwizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector)
{
Method originalMethod = class_getInstanceMethod(cls, originalSelector);
Method swizzledMethod = class_getInstanceMethod(cls, swizzledSelector);
BOOL didAddMethod =
class_addMethod(cls,
originalSelector,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod));
if (didAddMethod) {
class_replaceMethod(cls,
swizzledSelector,
method_getImplementation(originalMethod),
method_getTypeEncoding(originalMethod));
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
}
참고 : 당신이 사용하는 경우이에만 작동합니다 네비게이션 컨트롤러 및 푸시/뷰 뷰 컨트롤러
ViewControllers가 내비게이션 컨트롤러가 소유 한 각각의 네비게이션 스택에서 푸시되고 팝되었습니다. AppDelegate는 UIApplication 개체 수명 이벤트의 위임자입니다. 그들은 전혀 관련이 없습니다. 무엇을 성취하려고합니까 ?? –
정말 추가 메서드를 호출하지 않고? –