iOS自己动手实现tableview可重用机制

iOS自己动手实现tableview可重用机制,第1张

tableview的实现原理:

1.给view添加重用Id要用的时候就从重用缓存池里找可以重用的view如果没有就创建一个添加到缓存池中

2.把屏幕外不可见的view去掉放进可重用池中

本文就是简单实现这个可重用功能,创建一个单个view为屏幕大小,只需要2个view就可以无限滑动的小demo

首先需要写一个一个dataSourse的协议供外部使用

只是简单的实现可重用功能,所以不需要动态添加view,数量和大小都写死了,这个set就相当于缓存池,这里用array也可以,但是由于查找可重用view是随机存取不需要顺序存储所以没必要用array,判断和决定一个view是否可重用需要一个标志,这里就用view自带的tag来处理了,当tag为1时代表可重用(当前不显示在界面上),为0为不可重用(已显示在界面上)

之后需要在初始化后就添加一个view,这里创建了一个first标签用来判断是不是初始化,因为layoutsubviews不只会调用一次,而且我尝试的时候发现是手指移动距离等于屏幕宽度的时候正好会调用一次(一开始没注意这个问题被坑了好久)

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

//获取每次调用该方法相对上次调用时的手指偏移量

let offset = (touches.first?.previousLocation(in: self).x)! - (touches.first?.location(in: self).x)!

//记录当前屏幕左边到原点的距离

contentOffset += offset

view不像button那样能直接添加点击事件,只需下面两步,即可完成添加。

1.在story board 上给view添加一个 tap gesture recognizer

2.ctl-drag "view" to tap gesture recognizer。

IOS9开始不建议多个view 连到同一个gesture recognizer 上,如果想多个view响应同一个action,还是把多个gesture recognizer 连到同一个action上吧。

3.ctl -drag “tap gesture recognizer” 到代码里,选择“action”

然后添加action代码即可。

需要你在- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath代理方法内,指定cell的高度,然后在cell的内容更改后,刷新tableView (或者是刷新这一行)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/bake/11648299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存