当先锋百科网
首页
1
2
3
4
5
6
7
【字典转模型 Objective-C语言】
一、点按钮,弹出的这个效果,这实际上是个Label,
这实际上是一个Label,点按钮弹出的这个效果,
设置一个Label的背景色、前景色、透明度、等等,
让它加进来,然后通过动画让它隐藏掉,
这就是,这个效果的实现思路,
咱们这个效果,先稍微往后放一放,
这个并不是重点,
接下来要做的一些东西,如果对于初学者来说,是有一些难度的,
那么这些难,难在哪儿了呢,
我们这里要做的是个什么功能呢,
要做的是,把刚才这个九宫格这个代码,刚才已经把它该做的已经做完了,
我们要做的是,把刚才这些代码封装一下,
封装,使用一个叫xib的东西,“叉爱必”的东西,
然后,同时,我们还要把这些代码做一些其他的封装,
就是做一系列的封装,
我们接下来写这些代码,写完以后这个效果还是这个效果,
只不过代码,要比之前看起来要好,
代码,做了更高级的封装处理,
这就是我们接下来要做的一系列的操作,
2.我们先来看一下我们这个代码,
我们这里是在viewDidLoad,当我们的控制器的view加载完毕以后,里面通过这一系列的内容,里面写一个循环,循环里面创建view,设置view的一些坐标,创建子控件,加到view里面,设置子控件的坐标、属性、数据,一个一个子控件设置,是不是在这个for循环里面有这么一堆的代码啊,
这么一堆的代码,写到for循环里面,大家觉得好不好,
觉得不爽对吧,
哪里不爽,有些同学说性能低,其实性能一点儿都不低,运行起来性能一点儿都不低,
对,可扩展性不强,
哪儿可扩展性不强,为什么可扩展性不强,
有同学说,再加一个按钮,那我直接把它改一下不就行了吗,我们数据里面,有几个数据啊,
数组里面,有几个数据啊,
现在我们数组里面,是不是有这么12条吧,
选中app.plist文件最后一个Dictionary,command + C、command + V,然后再运行,是不是又多出来一个按钮啊,
这个代码是有问题,问题也就是可扩展性的问题,
那么可扩展性,指什么问题,
其实这个代码,关键点在哪儿,关键点是这个代码没有达到我们的“可重用”,
没有达到“可重用”,
比如说,现在你这个控制器里面需要显示一个九宫格,是不是这一堆代码,
我又建了一个新的一个控制器,这个控制器里面,也要显示这么一系列的九宫格,这个时候怎么办,所有代码command + C、command + V,是不是直接拷过去,改一改,
是不是得这么做啊,
这叫代码的复制、粘贴,这叫代码的重用吗,不叫,
我们要想实现的是,当另外的一个控制器里面,也要显示九宫格的时候,直接把你这个类拿过来,直接就能用,
直接把你这个模块拿过来,调里面的某个方法,直接就能显示九宫格了,
是不是不需要把这个九宫格的代码从头儿再写一遍啊,
这就是这个代码的可重用性不强,换句话说,这个代码只能依赖于这个程序,
所以说,我们能不能把这个代码给它提取出来呢,所以,接下来,我们就说一下思路,怎么来提取这个代码:
二、提取这个九宫格代码:
1.告诉大家一个新的东西,就是xib文件,接下来,先告诉大家,这个xib是干什么的,
刚才大家有没有发现,每次创建一个控件,都要写这么一堆代码,
这样太繁琐了,我们要实现的效果是“所见即所得”,能不能实现这个效果,刚才我们发现,每一个应用是不是长的都是一样的啊,能不能在一个storyboard里先写把这3个控件(图片框、标签、按钮)拖出来,设置好坐标,然后呢,你把这个应用分别加载12次就ok了,
每一个应用的内容都是一样的,这些代码,我们通过可视化的方式,拖拉拽直接生成了,这样的话,就省的我去写代码了,
就是我想通过拖拉拽来生成这个控件,不需要去写代码了,
因为在一开始做iOS开发,所有的这些都要通过代码来实现,但是后来,为了提高开发效率,苹果就出了一个叫xib的东西,再后来,就又帮我们出了一个storyboard,
storyboard,我们已经用过了吧,就是往里面去拖拉拽控件,这个效果吧,
也就是说,一开始有了xib,后面有了storyboard,
这两个东西产生的原因,就是为了一点:“提高我们的开发效率”,
你那些控件,不需要每次都通过代码来创建了,可以通过storyboard,xib,快速通过鼠标拖拉拽生成的,生成以后你就可以直接用这个东西了,
2.那么有人可能会问,storyboard、xib,这两个东西都是为了提高开发效率,都是通过拖拉拽生成控件,
换句话说,它们两个都是用来描述软件界面的,
软件界面长什么样儿,就是通过这两个东西描述,
你把控件拽上来,它会根据你这个界面,根据这个storyboard文件,或者根据你这个xib文件,后台会自动生成这些代码,后台也是通过代码实现的,
就不需要我们来写了,对吧,
那么既然它们俩个都是做这件事情的,那么它们俩个有什么区别呢,
注意,这个xib,它是一个轻量级的描述软件界面的文件,
这个storyboard,它是一个重量级的描述软件界面的文件,
什么是重量级、什么是轻量级的呢,
轻量级的xib,它是用来描述一些,比如说一个控制器局部的小View,
比如说,这个九宫格中,每个应用,是整个页面中这么一小块儿吧,这么一小块儿内容,可以使用xib,
比如说,我们要描述一个多个界面,多个界面是不是意味着有多个控制器啊,
从这个界面,一点就到另一个界面,再一点又到另外一个界面,
当你要描述多个界面的时候,多个控制器,以及每个界面的界面之间,还有什么关系,这种情况下,使用后面这个重量级的storyboard,来进行描述,
现在我们是要描述一个一个的屏幕界面吗,是要描述一个一个的手机界面吗,不是,
是不是只要描述一个界面里面的某一个内容吧,
这个时候就可以使用xib,
所以说,接下来我们用的时候,就通过这个xib来描述我们这么一个界面,
3.接下来,我们就要给大家介绍这么几个知识,一个就是我们这个xib,
使用xib精简代码:
1)什么是xib,xib能做什么,
用来描述软件界面的文件,
如果没有xib,所有的界面都需要通过代码来手动创建,
有了xib以后,可以在xib中进行可视化开发,然后加载xib文件的时候,系统自动生成对应的代码来创建界面,
与xib类似的还有storyboard文件,
2)xib与storyboard既然都是描述软件界面的,有什么区别吗,
xib是轻量级的,一般只用来描述一个界面中的某部分内容(用来描述局部UI界面)
storyboard是重量级的,一般用来描述软件的多个界面,以及不同界面之间的转换关系,换句话说,就是这个里面可以有多个控制器,并且还可以描述每个界面与每个界面之间的关系,跳转关系,
3)加载xib的方式:
NSBundle *bundle = [NSBundle mainBundle];
[bundle loadNibNamed];
[bundle bundlePath]; 查看mainBundle的路径,
4)查找xib在手机模拟器中的位置,安装到手机上后就变成了nib文件了,
/user/Steve/Library/Developer/CoreSimulator/Devices/0C63A035-071E-4EFC-8717-C387A3F7E026/data/Containers,
NSString *home = NSHomeDirectory();
NSLog(@“%@”,home);
5)大家要清楚,无论是xib还是storyboard,这两个东西,最终都是生成代码的,
也就是说,最后还会生成一个一个创建代码,
创建控件那个代码,只不过这个代码不需要我们手动来写了,
在我们继续介绍xib和storyboard之前,给大家介绍一个相对简单的东西,
先把这个搞定以后,然后咱们就来开始说这个xib,用这个xib,来封装我们的界面,
好,接下来给大家说的是一个什么东西呢,就是我们这里列出来的,这个叫做“字典转模型”,
三、字典转模型,
1.先把这个说出来,这个是和我们的数据有关的,
为什么要把字典转成模型,
字典的缺陷:
1)“键”是字符串,如果写错了,编译器不报错(在编译的时候不报错),运行时可能出错,出错了很难找错,
2)使用“模型”可以更方便的使用面向对象的3大特性(封装、继承、多态)进行扩展,