这部分感谢超哥以及51,让我学到更多知识对于一个初学者,少走不少弯路。
为了tableView以及cell理解,准备写一个聊天列表以及部分聊天记录的cell模块。
可以清晰的看到,有测试0-10个数据,当点击测试5等按钮的时候,会展开列表,显示其里面的内容,亲戚好友等内容,我暂时不会网络,根据51的内容,是用plist完成的数据.
可以看出来,这个plist里面的内容有三项内容,组名,在线人数,以及点开的时候展现的内容从上面的列表化得截图中可以看出来也就是三个部分,图标,描述,以及标题.
那么我们可以分得的模块是一组一组的以及组里面的模块,最小的模块是最简单地,所以我们看一下粒化最小的. friends是怎么的样子.
可以看出来,里面有14个项,每项的内容分别为icon, intro,name.这样的信息,我们就可以写成这样的MVC中的模型,模型为:
下面的方法是实现字典转模型用的,名字是必须和字典里面的名字是一样的,要不然不可以,暂时我是这么记得,以后会说明一下这玩意是什么的.
可以看出来,+方法就是创建对象, 调用对象方法,把字典转模型.这样的话,我们就把最开始的模型就完成了,那么,我们在往上看一下,那么就是一组一组的范围了.它数据-截图中说明了.里面包含的friends,name,online这几个字段, 我们可以看出来,friends是一个数组,那么我们的模型就要写成这样:
里面是一个数组friends,以及那些数据,下面的方法是字典转模型用的.
里面比模型里面的多了一个步骤,就是把friends的数组,分别取出来,赋值,再添加到组模型当中,for循环中的in是后面的是集合,逐一取出然后操作(这个我不会所以写出来了).
MVC中C中对于数据的加载截图中,是从包路径中找到firends.plist文件加载,加载完毕后赋值给dicArray中,在逐一取出,分别给组模型中的内容赋值.(这里面别忽略了上面提到的组模型中的数组,friends数组,在辅助的同属就会把friend模型的内容赋值过去,在这期间我们也可以做很多事情,比如,运算friend的内容尺寸等时间,在算firend尺寸这事吧,就是把组换成带有friend尺寸的M,就好比说其实就是friend的拓展,就是稍微多了尺寸,就是附加属性,我语文不好不知道说没说明白,就可以放在组(前面逻辑)这里面运算,这样当以后用到的时候就会直接拿来用了).这样就会模型之间就完事了.
这样.我们在C中就可以写tableView了.首先,功能是逐一实现的,所以先实现最简单的内容,在逐一添加功能.又因为这样是cell,因为长得都差不多,上下滚动的,所及是cell,理由就这个简单.
这两站图可以清晰的看出来这个cell类都干了些什么不为人知的事情,其实很简单,写的也很清晰明了,再次感学51这位老师,cell就是做cell自己的事,初始化,设置什么的都是在cell类中进行,不需要到C中进行.这样无论界面怎么变化都是在cell一个文件中修改.下面的第二个方法,就是重写了set方法,在friend赋值的情况下,在给cell的其他属性赋值.
这样看,我们的思路就是很清晰了.无非就是,告诉编译器,这有多少组,每组有多少行,每行显示的内容是什么样子的.在cellForRowAtIndexPath中体现了简洁,就两个步骤,创建cell,设置数据.仅此而已,这样的话,就可以吧friends中的内容显示出来了.在前面(一)中,我好像提一嘴footer以及heard的事情,我们可以看一下.因为我们是可以点击上面的,所以,上面是按钮Button所以,在一中的就不可以了,我们可以在tableView的代理中找到:
这两个方法,就可以返回的是View,既然是View那么我们就可以在View上添加我们想要的一切,在里面添加Button,那么,这个head就可以点击了,这样的话,第一个图当中样式也就可想而知了,就是布局问题了.
这里可以看出来,类方法,就是创建对象,缓存池没有,就创建,其次就是初始化布局信息,初始化基本信息.init方法,就是初始化控件等内容,没有大小,所以,在init方法中设置大小,位置是没用的.设置位置的方法是这个:
这里设置frame才有用,这个方法,是父控件frame改变的时候就会调用,以及时的改变子控件的位置.
设置数据,这里补充一点,setgourp的set方法,没有完全覆盖数据,应该,对于循环利用的东西,要保持能变的东西的数据都是最新的.所以要添加image的改变的方法.先使用的, 监听按钮点击事件,以及作相应的操作,完了,当你点击的时候,再用代理方法,告诉C,用户点击了这个按钮,以及时的处理事件.
就是简单地刷新数据,让其列表展开,上面的图,didMoveToSuperview是添加到父控件就会调用,为什么引入,这个函数那,是因为,head的缓冲池,是当前tableView不刷新的情况下,上下移动发,更换的时候,是从缓冲池里查看,但是我们调用了tableView 的 reload方法,这个方法就会刷新headview,那样的话,就会重新生成一个headview,所以,我们加入在按钮事件上写按钮变化,那么,上一个head都不存在了,何必是状态那,所以是看不出来的,所起,引入了模型当中的变量,加入按钮被点击,那么成员就会更改其状态,加入再次读取数据的时候就会更新最新的状态,到用户的眼前,所以,这样引入了这个didMoveToSuperview 的方法.