项目中我们创建一个控制器的时候,可能需要它遵守一些规范,比如不同的方法要分类,如下面
图1解决方案有三种 :
1 一个一个写这些方法分类标志
2 将它们做成代码块,每次需要的时候快捷创建
3 建一个类模板,控制器建成的时候就带有它们
显然第一种方法最笨的,第二种方式也可以,不过我建议的是第三种方式,创建的时候就自带这个分类,多方便,下面主要讲一下第三种方式
要创建一个模板类,首先我们来看一下系统的模板类,进入目录
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source
图2因为我们要建的是控制器的模板,所以我们就来看一下系统控制器UIViewController的模板
UIViewControllerXIBObjective-C和UIViewControllerObjective-C,一个带xib的一个不带xib的,其实你比较两个就会知道,他们的.h和.m文件是一模一样的,只不过一个多了一个xib而已,
我们再来看一下他们的.h文件
图31)DATE:标识当前时间;
2)FILENAME:带文件后缀的全名;
3)FILEBASENAME:不带文件后缀的名字;
4)FULLUSERNAME:当前的用户名
6)PROJECTNAME:工程名字;
7)FILEBASENAMEASIDENTIFIER:VC 类名称;
8)IMPORTHEADER_cocoaSubclass:导入的头文件。
这是系统控制器的模板,而当我们建一个控制器时是下面这样的
图4思考下,系统是怎么通过自己的模板文件到上面的控制器中类名、父类、头文件的映射呢,应该很容易想出,这是一个类似key-value的映射,所以肯定有一个字典来专门配置这些信息,仔细找下就会发现,还是在刚才目录下有一个TemplateInfo的plist文件
图5打开后,如下,在几个关键地方做了标志,
图6上图的父类名字,头文件是和图4的父类名字、头文件一一对应的
那么图4的类名是和谁对应呢,看下图
图7上图的创建时默认的类名、创建时选择的父类和图6的创建时默认、创建时选择的父类是对应的,而类名最终肯定还是自己输入的,那么对应的就是图4的的类名,
而图6的xib配置项中的xib对应的父类名字也和图7的创建时选择的父类是对应的,意思就是你选了那个父类,他在这个配置项中有,那么Also create XIB file这项就能勾选,就能创建对应xib
好了,上面讲了系统的控制器模板类怎么到控制器的映射,那么我们就来自己定义的模板类,
满足下面两点:
1 项目中我们创建的控制器可能都需要继承自一个基类,
2 我们创建控制器后控制器自己就有了方法分类标志,如图1
我们自己建一个模板文件夹还是放到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source路径下
然后把图1的两个控制器文件夹拷贝过来,修改这两个文件夹的名字,改成自己的模板控制器名字,前缀一定要是你要创建的模板类的父类名字,这个一定要改,不然创建控制器的时候是创建不了的因为找不到,而且两个最好都要有,因为它们一个对应有xib,一个对应无xib,你缺少了哪一个的话,那么对应的就创建不了的,比如你缺少无xib的文件夹,那么你创建无xib的控制器时是会创建失败的,同样找不到
图8然后再把两个文件夹的.m文件改成你想要的模板样式,
图9那么接着就是关键一步了,修改你自己模板文件夹下的TemplateInfo文件
图10好了,,明白了原理之后,修改就是这么简单,还有,上面那个DLBuyerBaseController是我项目中的父类,如果是你的话,肯定是要改成你项目中的父类的,demo本文最后会附上,
这是控制器模板,我们再来看下UIView的,平时项目中创建View的时候,每次创建两个.h.m文件后还有创建一个xib和它关联,有没觉得很蛋疼,是吧,那么能不能我搞一个view模板,创建view的时候,可以勾选是否关联xib,其实以前是可以关联的,后来苹果把它屏蔽掉了,不知道为啥,下面我们来看一下怎么搞,其实很简单,只要你明白了上面的原理,如图
图11自己建一个view的模板文件夹,然后把图5的也就是系统的view两个模板拷贝过来,这里我没有搞父view,所以文件夹的名字都不用改,直接修改TemplateInfo文件
图12只需要把这一项加进去就可以,就这么简单,再看系统的,它原来的是没有的
图13好最终创建时效果
图14本文模板代码https://github.com/aszkj/KJTemplateClass
参考链接
网友评论