IOS实现hook的功能,拦截UINavigati…

在应用中有时候需要对页面跳转做控制,如:是否有网络,是否有访问权限等。
在IOS实现hook的功能,拦截UINavigationController的页面跳转pushViewController方法
在页面公共代码 viewDidLoad中添加如下代码

    //================

    Method sendEvent = class_getInstanceMethod([UINavigationController class], @selector(pushViewController: animated:));

    Method sendEventMySelf = class_getInstanceMethod([self class], @selector(sendEventHooked:animated:));

    

    // 将目标函数的原实现绑定到sendEventOriginalImplemention方法上

    IMP sendEventImp = method_getImplementation(sendEvent);

    class_addMethod([UINavigationController class], @selector(myPushViewController: animated:), sendEventImp, method_getTypeEncoding(sendEvent));

    

    // 然后用我们自己的函数的实现,替换目标函数对应的实现

    IMP sendEventMySelfImp = method_getImplementation(sendEventMySelf);

    class_replaceMethod([UINavigationController class], @selector(pushViewController: animated:), sendEventMySelfImp, method_getTypeEncoding(sendEvent));

    //===========================


实现HOOK方法,既可以拦截对应的方法,添加业务操作后,再调用原有方法

 

- (void)sendEventHooked:(UIViewController *)view animated:(BOOL)anim

{

    // do something what ever you want

    NSLog(@"!!!!!!!===============haha, this is my self sendEventMethod!!!!!!!");

    //NSValue *value = [[NSValue alloc] ];

    [self performSelector:@selector(myPushViewController:animated:) withObject:view withObject:nil];

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值