淘先锋技术网

首页 1 2 3 4 5 6 7

一、点按钮,弹出的这个效果,这实际上是个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大特性(封装、继承、多态)进行扩展,