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

listview的adapter里有个getItemId(int position), 重写这个后,应该可以给listview中每个view赋一个id值,然后根据id可以获取view了,我认为可行,没试过。根据位置获取就可以了,为什么要用id获取?

在线性布局LinearLayout里加入view比较简单,因为属性比较少,布局简单 示例,加入一个TextView LinearLayout layout = (LinearLayout)findViewById(R.id.layout)TextView tv = new TextView(this)tv.setText("hello,world")LayoutParams l


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

原文地址:https://54852.com/bake/7873462.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存