IOS-UITableView上的纯代码实现

以前在练习这些常用控件的时候 都是或多或少的 使用storyboard做一些 配置, 这次大胆的尝试一下纯代码. 还好,顺利完成了.

 

做的东西很简单是一个丑到爆的QQ好友列表 ...

 

=======================

在不断学习tableview 过程中,慢慢的也了解了他的一些组成部分.

首先的最顶端有一个tableHeaderView, 与它对应最低端还有一个tableFooterView, 这两个控件都是UIView * 类型的控件,所以你可以任意自定义它们.. 

然后中间 就是可滑动的Cell了, 中间这块区域里面 又可以分组, 而且分组的顶端和尾部, 又有两个控件可以使用.

这两个控件是使用代理方法- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section创建的.

这两个控件又封装在 UITableViewHeaderFooterView 这个类里面, 如果我们自定义它们的时候, 在创建类时候 要继承这个类...

并且这两个控件是可以重用的..

======================

在这个过程中还碰到一些关于重用方面的问题, 对于重用的过程 有了一点小小的探索 ...

当一个控件会被重用的时, 要确保控件的重新赋值, 不要残留在控件上的操作...

在做这个界面的时候, 碰到一些问题, 包括视频教程中的代码也有逻辑上的问题, 都是关于在控件重用方面的.

 

我尽量摸索了一下 这个重用的过程中发生了什么, 我理解是, 当一个控件被放到缓冲池中的时候,他是完完整整的被放到里面的, 我们通常是通过创建相关的类, 在类中添加控件, 以及一些控件需要的数据来实现我们自己的控件的.. 这些控件以及数据都是包含在控件类中的, 所以,在控件被放到缓冲池中的时候, 不仅仅所创建的控件, 还有 封装在类中的数据...这些数据往往保留这对控件的操作信息, 这些是很可能被遗忘的, 最终在再次使用的时候造成残留..

我们在使用plist文件记录数据的时候, 创建了一系列相关操作属性与之对应, 并封装成一个数据模型, 最终将模型对象以一个数组的形式存放到内存中,  这个数组 控件的重用上 也是有一定的联系的...当一个控件被放到缓存池中, 在下一次被取出来重用的时候, 我们往往有一个对控件的 赋值过程, 这个过程我们通常使用个setter方法实现,  要赋值 总要有数据吧 ,这时候 数据当然就要从这个数组中取得. .刚开始我一直以为,这个内存中的数组 仅仅在初始化的时候 ,使用一次后, 就不会再用到了, 其实不然, 它的这个整个程序运行过程中都是不可或缺的..

为什么会有这个错误的意识, 是因为忽略了在创建变量的时候 那些描述关键字, copy, strong 等等..当我们修改了相关描述属性的值的时候,  这时候 是一个隐式的地址操作, 并非简单的值操作, 所以数组中的值也会变化, 以为他们的指针是指向的同一块地址的....

所以,在重用的时候, 和第一次 创建时候 过程是一样的, 后面的赋值过程也是一样的, 这个赋值过程(setter方法) 必须考虑周全, 不要留下数据残留..

 

 ==========================

还遇到一个控件 控制器 通讯的问题 , 其实就是代理的使用

以前写代码总是照着葫芦画瓢, 没有体会到,也不太理解 为啥要用代理, 这次在自己写代码的时候, 才了到...

很简单的一个例子, 当我们 在定义的类中, 需要使用控件器去调用一些东西的时候 , 比如 刷新tableview..就必须难道tableview的父类self吧, 或者需要 使用控制器self...这时候 就需要用代理, 或者 block,还有一个通知机制, 这三种方法. ..

代理很简单 ,就是让控制器去实现代理方法,  然后在控件生成后, 将delegate属性 赋值一个 控制器self 即可. . .这样就拿到了控制器的使用权限了..

============

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值