以后每用Runtime解决一个问题,就会记录在这个文集里。
我将以真实的使用场景为大家讲述Runtime的各种用法,让Runtime真正的投入到生产中。
合辑demo Github地址
正文
按照下面路径开启功能,会发几乎现所有的UIButton的文字下都被加上了下划线。
设置-通用-辅助功能-按钮形状
效果奇差,具体如下。
......
其实我不知道这个功能的本意到底是什么....
我只是觉得这个效果很难受,而不管用户是否选择开启这个功能,App里都不应该出现这个下滑线的效果。
于是我就把这个加下划线的功能干掉了。
干掉它的代码如下:
BOOL wel_buttonShapesUnderline(id self, SEL _cmd) {
return NO;
}
@implementation UILabel (WELButtonShapesUnderline)
+(void)load {
Method m = class_getInstanceMethod([UILabel class], NSSelectorFromString(@"_shouldShowAccessibilityButtonShapesUnderline"));
method_setImplementation(m, (IMP)wel_buttonShapesUnderline);
}
@end
做这个前后花了不到十分钟,算是这一堆里最好搞的一个。
我用Aspects钩了Button的所有方法「返回值类型为结构体的方法不能钩,Aspects触发消息转发的方法有问题,只在i386和arm64上跑的通。可以用JSPatch的思路魔改。不过少钩几个方法在这个需求上也是没问题的,这里就不展开说了」
去设置那里开启「按钮形状」这个功能,回到App,发现Button的几个方法被调用,跟堆栈,很轻松的就能找到这个方法。
网友评论