巧用iOS运行时特性,将原本系统中的左侧侧滑pop事件,添加到view中.源码欢迎star和关注。

1、Swift版本
//在自定义的UINavigationController里面获取到系统侧滑的pop事件,然后将事件添加到view上面
override func viewDidLoad() {
super.viewDidLoad()
// var count : UInt32 = 0
// let ivas = class_copyIvarList(UIGestureRecognizer.self, &count)!
// for i in 0..<count {
// let nameP = ivar_getName(ivas[Int(i)])!
// let name = String.init(cString: nameP)
// print(name)
// }
guard let targets = interactivePopGestureRecognizer?.value(forKey: "_targets") as? [NSObject] else { return }
let targetObj = targets[0]
print(targetObj)
let target = targetObj.value(forKey: "target")
let action = Selector(("handleNavigationTransition:"))
let panGes = UIPanGestureRecognizer.init(target: target , action:action)
view.addGestureRecognizer(panGes)
}
2、OC版本
- (void)viewDidLoad {
[super viewDidLoad];
UInt32 count = 0;
Ivar *ivars = class_copyIvarList(NSClassFromString(@"UIGestureRecognizer"), &count);
for (int i = 0; i < count; i++){
Ivar ivar = ivars[i];
const char *ivarName = ivar_getName(ivar);
NSString *ivarNameCode = [NSString stringWithUTF8String:ivarName];
NSLog(@"%@",ivarNameCode);
}
free(ivars);
NSArray *targets = [self.interactivePopGestureRecognizer valueForKey:@"_targets"];
NSLog(@"%@",targets[0]);
SEL sel = NSSelectorFromString(@"handleNavigationTransition:");
UIPanGestureRecognizer *panGes = [[UIPanGestureRecognizer alloc] initWithTarget:[targets[0] valueForKey:@"target"] action:sel];
[self.view addGestureRecognizer:panGes];
}
网友评论