以后每用Runtime解決一個問題湃番,就會記錄在這個文集里斧抱。
我將以真實的使用場景為大家講述Runtime的各種用法,讓Runtime真正的投入到生產(chǎn)中匙姜。
合輯demo Github地址
正文
按照下面路徑開啟功能脂倦,會發(fā)幾乎現(xiàn)所有的UIButton的文字下都被加上了下劃線番宁。
設置-通用-輔助功能-按鈕形狀
效果奇差,具體如下狼讨。
其實我不知道這個功能的本意到底是什么....
我只是覺得這個效果很難受贝淤,而不管用戶是否選擇開啟這個功能柒竞,App里都不應該出現(xiàn)這個下滑線的效果政供。
于是我就把這個加下劃線的功能干掉了。
干掉它的代碼如下:
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觸發(fā)消息轉(zhuǎn)發(fā)的方法有問題稼虎,只在i386和arm64上跑的通衅檀。可以用JSPatch的思路魔改霎俩。不過少鉤幾個方法在這個需求上也是沒問題的哀军,這里就不展開說了」
去設置那里開啟「按鈕形狀」這個功能,回到App打却,發(fā)現(xiàn)Button的幾個方法被調(diào)用杉适,跟堆棧,很輕松的就能找到這個方法柳击。