给系统类扩展属性(枚举)或方法

在这里我以UIButton为例子给大家展示一种实现方法,主要依靠runtime实现。废话不说上码...

1.扩展一般属性NSString

@interface UIButton (CJButtonType)
@property (nonatomic, strong) NSString *typeString;
@end
///////////////////////////////////////////////
#import "UIButton+CJButtonType.h"
#import <objc/runtime.h>
@implementation UIButton (CJButtonType)
- (NSString *)typeString {
    return objc_getAssociatedObject(self, @selector(typeString));
}
- (void)setTypeString:(NSString *)typeString {
    objc_setAssociatedObject(self, @selector(typeString), typeString, OBJC_ASSOCIATION_RETAIN_NONATOMIC);   
}
@end

2.扩展枚举类型


#import <UIKit/UIKit.h>
typedef NS_ENUM(NSUInteger, BuyHouseCalculatorType) {
    BuyHouseCalculatorType_PublicReserveFundLoan = 0, 
    BuyHouseCalculatorType_BusinessLoan,              
    BuyHouseCalculatorType_GroupLoan                  
};
@interface UIButton (CJButtonType)
@property (nonatomic, assign) BuyHouseCalculatorType buyHouseCalculatorType;
@end

#import "UIButton+CJButtonType.h"
#import <objc/runtime.h>
// 定义全局静态字符作为关联的Key值
const char *buyHouseCalculatorTypeKey = "buyHouseCalculatorTypeKey";
@implementation UIButton (CJButtonType)
- (void)setBuyHouseCalculatorType:(BuyHouseCalculatorType)buyHouseCalculatorType {
    objc_setAssociatedObject(self, buyHouseCalculatorTypeKey, @(buyHouseCalculatorType), OBJC_ASSOCIATION_ASSIGN);
}
- (BuyHouseCalculatorType)buyHouseCalculatorType {
    return [objc_getAssociatedObject(self, buyHouseCalculatorTypeKey) integerValue];
    
}
@end

3.扩展方法

//// .h
+ (UIButton *)button;
+ (UIButton *)buttonWithTitle:(NSString *)title titleColor:(UIColor *)color;
////  .m
+ (UIButton *)button {
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectZero];
    [button setClipsToBounds:YES];
    [button setExclusiveTouch:YES];
    return button;
}
+ (UIButton *)buttonWithTitle:(NSString *)title titleColor:(UIColor *)color {
    UIButton *button = [UIButton button];
    [button setTitle:title forState:UIControlStateNormal];
    [button setTitleColor:color forState:UIControlStateNormal];
    return button;
}

以上是鄙人的小小见解,喜欢的朋友可以互粉一起学习。。。。。

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

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,259评论 4 61
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • 苹果官方文档翻译 《Objective-C语言编程》(Programming with Objective-C) ...
    fever105阅读 25,933评论 19 130
  • ——长淮诗典8月上同题诗稿 肯定了 前行无法完成 改变方向不能转身 你肯定不是跟从 善意的提醒也许最终是无动于衷 ...
    微风LG阅读 261评论 2 4
  • 我们的一生中会遇到很多很多的人,各种各样的。我们与他们经历不一样的故事,身处其中的我们或喜或哀,或怒或乐,或惊或恐...
    尘世的一根葱阅读 584评论 0 1