参考文章:https://www.unicorn-it.de/developing-reusable-views-in-a-swift-framework/
过程要点:
1. 选择Cocoa Touch Framework,所有的内容都是继承swift
2. Reusable View的类已经相关的方法都要public
3. 在打包之前,将Build Phase中的header中添加相关的swift添加public文件
因为要涉及到跟第三方的app集成,昨天接到老板的任务需要尝试下如何制作可重复利用的View,以此不用写很多重复的代码,将一部分可以重复利用的view或者代码进行framework封装,因为本人也是菜鸟,所以摸索了大半天的时间,写下这篇文章也是想记录一下整个过程。
本文将采用swift语言来封装一个简单的LoginView,同时建立一个简单的测试工程来调用这个view。
创建Framework工程
创建Cocoa Touch Framework,语言选择swift。

为了创建一个可重复利用view,因为我们没有将它放到storyboard里面,而是单独制作xib文件,同时创建对应的UIView:

xib和对应的swift文件创建完成之后,需要将loginView xib的File Owner设置成对应的class文件,这里就是LoginView,如下图所示,到这里为止,我们基本的大框架已经搭建完成,接下来就是绘制LoginView xib文件的内容,这里我简单绘制了一个Login登陆页面。

LoginView逻辑处理以及xib页面绘制
逻辑很简单,这里我定义了一个闭包函数变量,获得用户和密码之后, 如果外部想自定义,则自定义处理结果,否则采用默认的方式,弹出对话框。

public var handleLogin: ((username:String?, password:String?) ->Void)?
打包Framework
在打包之前,需要一些配合,目的是为了让你定义的接口能够在外部访问,同时确保我们定义的class的public访问的,一些方法也需要public,如下图所示:

同时,需要配置build setting:

否则在你的测试工程中会找不到这个对应的swift类,build完成之后,在debug-iphoesimulator(直接右击CVFarmework.framework找到对应的目录)的文件中可以拿到该build出来的文件。到这里为止,我们就可以进行测试了。

测试工程的搭建
将build出来的framework工程拷贝到当前测试工程目录下,然后进行import,如下,TARGETS->General->Embedded Binaries + 添加进来

在测试工程的storyboard中的默认viewcontroller中拖入一个View,然后将这个view跟framework中的LoginView进行绑定,这里需要注意的是在Identity Inspect中填写class和module,注意通过autolayout添加约束。

测试代码:
我定义了一个闭包的函数,执行获得用户名和密码之后的操作,这里只是简单的打印信息。

测试结果:为了看清楚,我给可重复利用的view加了一个橘黄色的背景。

网友评论