公司最近在做埋點,要獲取當前的控制器和上個控制器。自己在做的過程中遇到的一點問題,希望能和大家共勉。
大致思路是,新建一個UIViewController+YQHook.h擴展文件
然后在?AppDelegate中 ? [UIViewController hookUIViewController];
這里為了兼容到present和push 兩種方式
1.push
當前頁面viewwilldisapper->當前頁面的diddisapper->下個頁面的viewdidapper
2.present
當前頁面viewwilldisappe->下個頁面的viewdidapper->當前頁面的diddisapper
總結:為了正確獲取當前控制器和上個控制器
在didapper獲取當前控制器,
- (void)hook_ViewDidAppear:(BOOL)animated
{
? ? NSString*appearDetailInfo = [NSStringstringWithFormat:@" %@ - %@",NSStringFromClass([selfclass]),@"didAppear"];
? ? NSLog(@"%@", appearDetailInfo);
? ? [DataContainer dataInstance].lastVc=nil;//這里一定注意為空,否則所有頁面不能釋放?
? ? if (![self isKindOfClass:[SPAlertController class]]) {
? ? ? ? //第三方特殊處理
?? ? ? ? [DataContainer dataInstance].currentVc=self;
? ? }
? ? [self hook_ViewDidAppear:animated];
}
-(void)hook_viewWillDisappearMethod:(BOOL)animated{
? ? NSString*appearDetailInfo = [NSStringstringWithFormat:@" %@ - %@",NSStringFromClass([selfclass]),@"disApper"];
? ? NSLog(@"%@", appearDetailInfo);
? ? [DataContainer dataInstance].currentVc=nil;
? ? if (![self isKindOfClass:[SPAlertController class]]) {
? ? ? ? ? ? [DataContainer dataInstance].lastVc=self;
? ? }
? ? [self hook_ViewDidAppear:animated];
}