公司最近在做埋点,要获取当前的控制器和上个控制器。自己在做的过程中遇到的一点问题,希望能和大家共勉。
大致思路是,新建一个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];
}
网友评论