Category(分类)的创建和使用
分类的作用与注意事项:
- 可以在不修改原来类的基础上,为一个类扩展方法。
- 最主要用法是给系统自带的类扩展方法。
- 分类中只能添加“方法”,不能增加成员变量。
- 分类中可以访问原来类中的成员变量,但是只能访问@protect和@public形式的变量。如果想要访问本类中的私有变量,分类和子类一样,只能通过方法来访问。
- 分类要添加属性需要用setter和getter方法、关联对象等
- 调用子类文件时要在.m文件中调用,否则程序会崩溃
使用场景:给系统的类添加方法、给类拓展一些方法但不想让子类继承时
分类的创建:
新建一个文件时,会出现下面的页面:
我们选择Objective-C File
接下来会出现下面的页面:
接下来我们要为ViewController类创建一个change子类:
我们在上图中的File空格中填写change,然后File Type选择Category,Class空格中填ViewController即可成功创建。
创建成功之后的效果如下:
系统会自动生成 原类名+子类名 的文件
自此我们已经将子类创建成功了
接下来我们来创建一个例子:
ViewController.h中:
#import <UIKit/UIKit.h>@interface ViewController : UIViewController@end
ViewController.m中:(在.m文件中调用分类的.h文件,否则程序会报错)
我们创建一个按钮,在按钮的事件函数中调用子类中所写的方法(子类所写方法是当点击按钮后改变按钮的图片)
#import "ViewController.h"
//调用子类的文件
#import "ViewController+change.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.UIButton *buttonTest = [UIButton buttonWithType:UIButtonTypeCustom];[buttonTest addTarget:self action:@selector(pressButton:) forControlEvents:UIControlEventTouchUpInside];[buttonTest setImage:[UIImage imageNamed:@"shoucang.png"] forState:UIControlStateNormal];buttonTest.frame = CGRectMake(100, 200, 45, 45);[self.view addSubview:buttonTest];
}//按钮的事件函数
- (void) pressButton : (UIButton *) button {//调用分类中的方法[self changeImage:button];}@end
ViewController+change.h文件中:(在该文件中定义函数)
#import "ViewController.h"NS_ASSUME_NONNULL_BEGIN@interface ViewController (change)- (void) changeImage : (UIButton *) button;@endNS_ASSUME_NONNULL_END
ViewController+change.m文件中:(在该文件中实现函数)
#import "ViewController+change.h"@implementation ViewController (change)- (void) changeImage:(UIButton *)button {//改变按钮的图片[button setImage:[UIImage imageNamed:@"expressions.png"] forState:UIControlStateNormal];}@end
实际运行效果:
未点击按钮前:
点击按钮后:
可以发现,按钮的图片发生了改变。
Category(分类)的创建和使用相关推荐
- Category 分类、类别 总结 - iOS
分类作用 分类:可以给某一个类扩充一些方法(不修改原来类的代码) 格式 // 声明 @interface Person (分类名称)@end// 实现 @implementation Person ( ...
- woocommerce 分类到菜单_Woocommerce教程:添加和编辑产品Category分类
在使用WordPress的woocommerce商城插件制定商城的时候, 如果你公司拥有众多产品, 那么应该需要给这些产品添加Category分类, 以便分类管理产品, 让网站访客更快地找到自己想要的 ...
- R语言使用两个分类变量创建双向表(Two Way Table、两个分类变量的频率表)实战: 矩阵的双向表、dataframe的双向表、条形图和马赛克图来可视化频率表
R语言使用两个分类变量创建双向表(Two Way Table.两个分类变量的频率表)实战: 矩阵的双向表.dataframe的双向表.条形图和马赛克图来可视化频率表 目录
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类进行方法注入的优缺点 )
文章目录 一.使用 Category 分类进行方法注入的优点 二.使用 Category 分类进行方法注入的缺点 一.使用 Category 分类进行方法注入的优点 之前的博客 [Groovy]MOP ...
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类注入方法 )
文章目录 一.方法注入 二.使用 Category 分类注入方法 三.完整代码示例 一.方法注入 在之前的博客中 , 主要是使用 Groovy 元编程 拦截方法 , 改变方法的实现 ; 使用元编程还可 ...
- Category(分类/类目)、Protocol(协议)、Extension(扩展/延展)
Category(分类/类目): 利用Objective-C的动态运行时分配机制,Category提供了一种比继承更为简洁的方法来对class进行扩展,无需创建对象类的子类就能为现有的类添加新方法,可 ...
- 在Magento产品分类页面创建推荐产品(Featured Products)
在进行Magento的相关操作的时候,你可能都想在产品分类页面添加上这一类产品的推荐产品(FeaturedProducts),这类产品一般是销售比较好的,或者是你的利润比较大的产品,那我们应该怎么样添 ...
- 哈希表的分类,创建,查找 以及相关问题解决
总体的hash学习导图如下: 文章目录 定义 分类 字符hash 排序hash 链式hash(解决hash冲突) 创建链式hash 查找指定数值 STL map(hash) 哈希分类 完整测试代码 应 ...
- solidworks模板_SolidWorks文件属性分类和创建方法,图纸自动属性的基础
1.文件属性 文件属性描述了基于Windows系统的文件的一些可用于识别该文件的细节信息.我们可以通过文件属性来搜索和组织文件.SolidWorks的文件添加有其独有的文件属性,这些属性可更好地用于工 ...
最新文章
- python执行命令并返回结果集_Python接口测试结果集实现封装比较
- Leetcode记录
- S如何边缘控制_强夯法效果如何?来看看这个检测结果
- docker 安装mysql_Docker安装MySQL完整版流程
- 【BZOJ2194】快速傅里叶之二,FFT和一点奇怪的想法
- bzoj1860 [Zjoi2006]麻将 结论+插数dp
- Spring源码之创建AOP代理(补)
- 什么是SysWow64,什么是System32
- UE4 各种玻璃材质制作汇总
- 手把手教你集成Andriod百度地图SDK
- 起源地杯青年足球锦标赛
- 【安卓】设置应用的开机启动
- 计算机主机箱进行总结,工业级主机用机箱分类总结
- cuda cudnn tensorflow对应_Cuda 的安装步骤
- 【ATE-SENT协议】使用LabVIEW采集并解析SENT协议
- 旅游推荐系统python_Python 实现推荐系统
- 随机获得map/json中的一组键值对
- 漏洞分析丨HEVD-10.TypeConfusing[win7x86]
- 家族关系查询系统程序设计算法思路_数据结构课程设计(家族关系查询系统)
- GFD233A 3BHE022294R0103
热门文章
- windows的bat脚本编写
- 【论文笔记】LiDAR Iris for Loop-Closure Detection
- Airbnb爱彼迎推出看得见“春色”的房源
- 自动驾驶哪家强?全球自动驾驶竞争力排行分析
- 双线性内插怎么缩小_鼻翼缩小该做内切还是外切?会留疤吗?恢复期是多久?...
- Java反射08 : 成员方法Method学习示例
- js删除对象中所有值为null和undefined的属性
- 【硬盘数据恢复】硬盘加电有异响,经检测是磁头损坏故障的硬盘数据恢复
- acm最难题_看到最接近客户的难题
- “笨办法”学Python3--习题37 复习各种符号