一种基于Object_C语言分类实现多样式弹窗的方法与流程

文档序号:18899100发布日期:2019-10-18 21:41阅读:404来源:国知局
一种基于Object_C语言分类实现多样式弹窗的方法与流程

本发明涉及计算机终端技术领域,主要涉及一种基于object_c语言分类实现多样式弹窗的方法。



背景技术:

现有技术当前提供的应用于ios系统开发的消息展示框样式上:主要包含标题、内容、左边按钮、右边按钮,样式都是固定的,而且内容单一,单一的内容是无法满足企业app开发时丰富多样的弹框要求的。调用上:需要先在控制器中新建该弹框对象,添加左右按钮,填入相关消息文本,这样在使用过程中会显得复杂,而且对于整个项目的代码量会增加。



技术实现要素:

本发明所要解决的技术问题是提供一种弹窗展示内容多样化,可自主定义、适用范围广,弹窗设计效率高的基于object_c语言分类实现多样式弹窗的方法。

本发明所要解决的技术问题可以采用如下技术方案来实现:

一种基于object_c语言分类实现多样式弹窗的方法,包括如下步骤:

1)配置弹框展示信息

接收服务器发送的弹窗展示请求,在服务器上预置所述弹窗的大小、弹窗主体显示位置以及弹窗内容显示位置,得到预设弹窗框架模板;

所述弹窗展示请求携带待展示弹窗的xml信息,接收到所述xml信息后会在xcode中新建一份空白的.xib文件,该文件是用于存放xml信息的子控件;

对所述xml信息进行解析,得到所述待展示弹窗的显示元素、各个显示元素的显示描述信息以及object_c语言代码,在可视化界面中配置好需要展示信息;

所述object_c语言代码包括.xib文件的颜色、大小、约束、位置、适配的手机屏幕尺寸、使用的编码等信息,还包括所述待展示弹窗的显示元素以及各个显示元素的显示描述信息;

所述xml信息通过所述object_c语言代码配置好解析出来的控件,构建出的所述控件添加用户事件:①声明无返回值,有参数的block对象;②为构建的控件添加两个block对象的属性,一个为确定事件处理服务,一个为取消事件处理服务;③分别将声明的block对象赋值到步骤②中添加到控件上的两个属性;

2)条件传递新弹框

利用block块实现点击事件传递,同时实现旧弹框的移除,利用分类方式书写调用接口:

①新建一个控制器类分类;

②在该分类.h文件中暴露调用接口;

③在分类的.m文件中去实现接口,并传入相关参数;

点击事件的传递是以block作为函数的参数传递,在用户点击了弹窗中的确定或取消按钮后,系统会逐级查找isa指针,最后找到需要处理事件的block块,也就是最终呈现在控制器层的block,并运行block块中的代码,从而实现点击事件的传递;

旧弹框的移除是在ios开发中,uikit框架的uiview类中提供了将子视图从父视图移除自身的方法:removefromsuperview,当用户点击了确定或取消按钮后,弹框对象调用上述方法[selfremovefromsuperview],实现弹窗移除;

3)展示弹窗

根据预设弹窗框架模板和所述待展示弹窗的显示元素以及各个显示元素的显示描述信息,对弹窗进行展示。

本发明的有益效果是:一种基于object_c语言分类实现多样式弹窗的方法,在弹框样式上,实现了由程序员自主定义,可以适用任何样式的企业app弹框样式;在方法调用上,利用了分类的特性,只需要一句代码便可唤起弹框,并且可以实现在任何控制器中唤起,大大提高了开发效率,节省了开发时间。

附图说明

图1是本发明一种基于object_c语言分类实现多样式弹窗的方法的流程图。

图2是本发明步骤2)条件传递新弹框中block块的原理结构图。

具体实施方式

为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。

参见图1,一种基于object_c语言分类实现多样式弹窗的方法,包括如下步骤:

1)配置弹框展示信息

接收服务器发送的弹窗展示请求,根据业务需求在服务器上定义好在app中需要展示的弹窗的大小、弹窗主体显示位置以及弹窗内容显示位置,得到预设弹窗框架模板;弹窗展示请求携带待展示弹窗的xml信息,app端在做相关业务需求的时候,弹窗的xml信息伴随业务处理成功与失败一并返回;app端接收到xml信息后会在xcode中新建一份空白的.xib文件,该.xib文件相当于一个用于xml信息携带的子控件容器,调度解析器算法解析xml信息,在算法出口将解析到的数据进行封装缓存。

在缓存处理线程中读取缓存的数据,根据不用控件的不同id,调用系统init方法构建相关控件对象(uiview/uibutton/uiimageview/uilabel等),根据缓存数据给构建的控件赋值大小,颜色,位置,文字,触摸事件等属性,会得到object_c语言代码;该object_c代码包括.xib文件的颜色、大小、约束、位置、适配的手机屏幕尺寸、使用的编码等信息,同时包括待展示弹窗的显示元素以及各个显示元素的显示描述信息。在.xib的代码文件中,加入<objects></objects>标签,服务器返回的xml信息中会包含需要添加在.xib文件中的多个子控件,例如:uilabel控件,uiimageview控件,uibutton控件,不同的子控件中,携带的信息可由服务器自定义。例如:uiimageview,可携带image的contentmodel,唯一标识id,x坐标,y坐标,宽度,高度;uibutton,可携带背景颜色,button被选中时背景图片和样式,button没被选中时的背景图片和样式,button的x,y坐标,button的大小,button显示的文字标题等等。

对xml信息进行解析,得到待展示弹窗的显示元素以及各个显示控件的显示描述信息,利用object_c代码配置好解析出来的控件,并且把各个控件的描述信息加到控件上,即为构建出的控件添加用户事件:①声明无返回值,有参数的block对象;②为构建的控件添加两个block对象的属性,一个为确定事件处理服务,一个为取消事件处理服务;③分别将声明的block对象赋值到步骤②中添加到控件上的两个属性。

以下代码是用object_c代码对解析出来的xml信息进行弹窗的配置:

2)条件传递新弹框

当检测到对弹窗中链接信息的触发操作时,解析链接信息,得到跳转对象地址;根据跳转对象地址,在客户端中打开跳转对象地址对应的界面。链接信息包括频道标识、应用标识、应用标识对应的表项标识、用户标识、群用户标识以及携带客户端接口信息的网页链接中的任一种;跳转对象地址指示客户端提供频道界面、应用界面、应用界面中的任一个表项、用户会话界面、群会话界面或网页中的任一种界面。

利用block块实现点击事件传递,同时实现旧弹框的移除,利用分类方式书写调用接口。

2.1)点击事件的传递

block定义:block本质上也是一个object_c对象或者说是一个结构体,内部也有一个isa指针;block是封装了函数调用(函数指针)以及函数调用环境(捕获到的参数)的object_c对象。

参见图2,block原理结构图,从图中很容易看到isa指针,所以object_c处理block是按照对象来处理的。本文以block作为函数的参数传递,在用户点击了弹窗中的确定或取消按钮后,系统会逐级查找isa指针,最后找到需要处理事件的block块,也就是最终呈现在控制器层的block,并运行block块中的代码,从而实现点击事件的传递。

2.2)旧弹窗移除

在ios开发中,每一个uibutton类型控件都没被监听到用户点击事件,由于uibutton是被添加到弹窗上的,调用点击事件函数能获取到当前的弹窗;uikit框架的uiview类中提供了将子视图从父视图移除自身的方法:removefromsuperview,当用户点击了确定或取消按钮后,弹框对象调用上述弹窗方法[selfremovefromsuperview],实现弹窗移除,且可以在内存中进行销毁。

2.3)分类定义

category是objective-c2.0之后添加的语言特性,分类、类别其实都是指的category,category的主要作用是为已经存在的类添加方法;objective-c中的category就是对装饰模式的一种具体实现,它的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法。

手机显示的当前界面我们称为一个uiviewcontroller,在uiviewcontroller对象中苹果公司会定义好一些固定的函数给开发者调用,但是在某些特定需求中,苹果公司提供的方法无法满足开发需求,所以一般会用分类的方式来补充满足特定需求的函数。本文以自定义的分类uiviewcontroller+httalertcontroller.h来补充满足开发需求的函数。

举例来说,实现代码如下:

①新建一个控制器类分类,名字以uiviewcontroller+httalertcontroller.h为例;

②在该分类.h文件中暴露调用接口,该接口主要供外部调用,用于展示弹窗;

-(void)showbluetoothdeviceconfigtipclosehandler:(closeblock)closeactionnexthandler:(nextblock)nextaction;

③在分类的.m文件中去实现接口,并传入相关参数;以下代码是对展示代码的实现,初始化了需要展示的弹窗对象,并且把相关参数传入到该对象中。

3)展示弹窗

经过步骤1和步骤2,弹窗已经在代码中生成,根据预设弹窗框架模板和待展示弹窗的显示元素以及各个显示元素的显示描述信息,在需要显示弹窗的地方进行快捷调用;利用分类特性,直接用控制器对象调用便可唤起弹窗。

本发明的实现代码如下:

步骤1:获取服务器后台数据

1)nsurl*url=[nsurlurlwithstring:urlstring];构建网络请求路径。

2)nsurlsession*session=[nsurlsessionsharedsession];设置请求通道session。

3)nsurlsessiondatatask*datatask=[[nsurlsessiondatataskalloc]init];构建网络请求对象。

4)[sessiondatataskwithrequest:requestcompletionhandler:^(nsdata*_nullabledata,nsurlresponse*_nullableresponse,nserror*_nullableerror){}];发送网络请求。

5)xmlresolver*resolver=[[xmlresolveralloc]init];新建解析器对象。

6)nsdictionary*data=[resolerresolve:xmldata];//解析xml数据。

7)boolflag=[resovlersavedata:data];缓存解析数据。

8)nsdictionary*data=[datamanagetgetdatawithdataid:id];根据id获取缓存中的数据。

9)nsstring*imagename=data[@“imagename”];获取图片名称。

10)nsstring*message=data[@“message”];获取提示文字。

11)floatxlocation=[data[@“xlocation”]floatvalue];获取x坐标。

12)floatylocation=[data[@“ylocation”]floatvalue];获取y坐标。

13)floatwidth=[data[@“width”]floatvalue];获取宽度。

14)floatheight=[data[@“height”]floatvalue];获取高度。

15)initalertviewwithframe:(cgrect)framemessage:(nsstring*)messageimage:(nsstring*)imagename;构建弹窗控件。

步骤2:为构建出的控件添加用户事件

1)typedefvoid(^leftaction)(void);

typedefvoid(^rightaction)(void);声明无返回值,block对象。

2)@property(nonatomic,strong)leftactionleftaction;

@property(nonatomic,strong)rightactionrightaction;

为构建的控件添加两个block对象的属性。

3)self.rightaction=rightaction;

self.leftaction=leftaction;

为控件上的两个属性赋值。

步骤3:移除弹窗

1)-(ibaction)rightbtnclick:(id)sender;确认/取消按钮点击监听。

2)[selfremovefromsuperview];调用系统方法removefromsuperview移除控件。

本发明以object_c为语言基础,应用于ios开发,通过在服务器后台自定义弹窗的方式,结合了ios开发特有的block块,采用分类的方式满足企业不同开发需求的弹窗实现方法,在调用上方便,便捷,支持服务器后台自定义,免去更新时重新上架app的麻烦。

以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及同等物界定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1