RuntimePlayer-干掉「辅助功能」-「按钮形状」开启后button产生下划线的功能

以后每用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的几个方法被调用,跟堆栈,很轻松的就能找到这个方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容