// // CYLTabBarController.m // CYLTabBarController // // v1.16.0 Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. // Copyright © 2015 https://github.com/ChenYilong . All rights reserved. // #import "UITabBarItem+CYLTabBarControllerExtention.h" #import #import "UIControl+CYLTabBarControllerExtention.h" @implementation UITabBarItem (CYLTabBarControllerExtention) + (void)load { [self cyl_swizzleSetBadgeValue]; } + (void)cyl_swizzleSetBadgeValue { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ cyl_ClassMethodSwizzle([self class], @selector(setBadgeValue:), @selector(cyl_setBadgeValue:)); }); } - (void)cyl_setBadgeValue:(NSString *)badgeValue { [self.cyl_tabButton cyl_removeTabBadgePoint]; [self cyl_setBadgeValue:badgeValue]; } - (UIControl *)cyl_tabButton { UIControl *control = [self valueForKey:@"view"]; return control; } #pragma mark - private method BOOL cyl_ClassMethodSwizzle(Class aClass, SEL originalSelector, SEL swizzleSelector) { Method originalMethod = class_getInstanceMethod(aClass, originalSelector); Method swizzleMethod = class_getInstanceMethod(aClass, swizzleSelector); BOOL didAddMethod = class_addMethod(aClass, originalSelector, method_getImplementation(swizzleMethod), method_getTypeEncoding(swizzleMethod)); if (didAddMethod) { class_replaceMethod(aClass, swizzleSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); } else { method_exchangeImplementations(originalMethod, swizzleMethod); } return YES; } @end