公司最近在做埋點(diǎn)郑趁,要獲取當(dāng)前的控制器和上個(gè)控制器。自己在做的過程中遇到的一點(diǎn)問題,希望能和大家共勉避矢。
大致思路是,新建一個(gè)UIViewController+YQHook.h擴(kuò)展文件
然后在?AppDelegate中 ? [UIViewController hookUIViewController];
這里為了兼容到present和push 兩種方式
1.push
當(dāng)前頁面viewwilldisapper->當(dāng)前頁面的diddisapper->下個(gè)頁面的viewdidapper
2.present
當(dāng)前頁面viewwilldisappe->下個(gè)頁面的viewdidapper->當(dāng)前頁面的diddisapper
總結(jié):為了正確獲取當(dāng)前控制器和上個(gè)控制器
在didapper獲取當(dāng)前控制器囊榜,
- (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];
}