iOS开发之初识UITableView
初识
在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UITableView继承自UIScrollView,因此支持垂直滚动,而且性能极佳。她有两种样式:UITableViewStylePlain和UITableViewStyleGrouped,前者其实就是android中的ListView或者RecyclerView,而后者样式在android中是需要通过xml创建布局的,总的说来这玩意功能比较全。
使用
1、设置数据源:要用UITableVIew显示数据,就要给她设置一个数据源,UITableView会向数据源查询一共有多少行数据以及每一行显示什么数据等,没有设置数据源的UITableView只是个空壳,凡是遵守UITableViewDataSource协议的OC对象,都可以是UITableView的数据源。
2、显示数据的过程:
//调用数据源的下面方法得知一共有多少组数据
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
//调用数据源的下面方法得知每一组有多少行数据
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
//调用数据源的下面方法得知每一行显示什么内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
3、Cell的重用原理:当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableView要求dataSource返回UITableViewCell时,dataSource会先查看这个对象池,如果池中有未使用的UITableViewCell,dataSource会用新的数据配置这个UITableViewCell,然后返回给UITableView,重新显示到窗口中,从而避免创建新对象。
4、还有一个非常重要的问题:有时候需要自定义UITableViewCell(用一个子类继承UITableViewCell),而且每一行用的不一定是同一种UITableViewCell,所以一个UITableView可能拥有不同类型的UITableViewCell,对象池中也会有很多不同类型的UITableViewCell,那么UITableView在重用UITableViewCell时可能会得到错误类型的UITableViewCell。解决方案:UITableViewCell有个NSString *reuseIdentifier属性,可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。当UITableView要求dataSource返回UITableViewCell时,先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,如果有,就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell对象。
Cell的重用代码:
-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath{//1.定义一个cell的标识staticNSString*ID=@”czcell";//2.从缓存池中取出cellUITableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:ID];//3.如果缓存池中没有cellif(cell==nil){cell=[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:ID];}//4.设置cell的属性...returncell;}
更多相关文章
- 活用Android线程间通信的Message机制
- Android(安卓)Activity堆栈信息
- OkHttpClient实例化解析
- Android(安卓)SQLiteOpenHelper的使用
- 【android】HandlerThread的使用及源码剖析
- Android之MVVM架构指南(五):ViewModel
- Android之Context理解
- Webkit for Android分析
- JNI 引用问题梳理