浅谈OC类别(Category)

简述

类别是一种为现有类添加新方法的方式,我们有时可以见到“类名称+类别名称”的命名方式。
类别可以添加属性property,但是不能添加实例变量。

一个实用的例子

下面我们来创建一个基于UILabel的类别,增加一个自适应Label的方法~

  • 我们先随意创建一个新类,用来存放类别代码,如命名为Tools
  • Tools.h中添加类别声明,如下:
@interface UILabel (KimiLabelCategroy)

//UILabel自动换行并调节字体尺寸以适应frame.size
- (void)kimiAutoAdjustsToContent:(NSString *)content;

@end

这里我特意添加前缀kimi,来避免方法名称冲突。

  • 接着,在Tools.m中实现方法:
@implementation UILabel (KimiLabelCategroy)
//UILabel自动换行并调节字体尺寸以适应frame.size
- (void)kimiAutoAdjustsToContent:(NSString *)content
{
    if ([self isKindOfClass:[UILabel class]])
    {
        //UILabel换行, A value of 0 means no limit
        self.numberOfLines = 0;

        //allow the label to be autosized to fit a certain width by scaling the font size(s)
        self.adjustsFontSizeToFitWidth = YES;

        self.text = content;
    }
    else
    {
        //NSException
    }
}
@end

该方法作用是根据content内容实现UILabel的自动换行和调整字体发小,使Label能够合理显示内容。

  • 使用这个类别的新方法,#import "Tools.h" 之后,对于一个现有的self.label,调用此方法:
[self.label kimiAutoAdjustsToContent:@"THE QUICK BROWN FOX JUMPS OVER A LAZY DOG."];

运行可以看到效果,self.label实现了自适应字体大小和换行:

kimiAutoAdjustsToContent

总结

这次给大家简要讲述了一下类别的概念,并结合一个实用的例子演示了其作用,希望能对大家有所帮助。
感谢阅读,如果您觉得本文有趣,欢迎转载,请注明出处~

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,446评论 25 708
  • 流水账 来了贵客,请假一天招呼下。送人出门时偷了个懒,结果客人迷路了,我勒个去...... 读书 善解童贞1:基于...
    狸狸的守护者阅读 156评论 0 0
  • by浅秋 一场大雨 把天上的精灵 带到山里 降生了一个个小孩子 童声悦耳 我听到了 一声声 对生命最初的期待 连延...
    浅秋Vera阅读 298评论 2 3
  • 天空依旧挂着几抹腮红, 偶来飘来几缕清风, 树梢也深情的挥动手臂, 是不是也不舍我的离去? 嘈杂的车厢时而传来一阵...
    浅斟清风对月明阅读 204评论 0 1