经常使用几个UITableView,UICollectionView UIScrollView关键点

UITableView
 
UITableView 在Ios中大量使用,咱们对UITableview中的有关知识进行整理
 
 
UITAbleView是表视图控制器
 
 1 UITableView初始化
 
 2UITableview实现代理
 
 3UITableView必须实现的方法(UITableviewdatasource)
   3.1一个组里有多少cell
   3.2 UITableviewcell的内容
 
 4
 
 UIcollectionView
 
 UIcollectionView是集合视图
 
 
 
1 UIcollectionFlowLayout的初始化
 
 
 2 UIcollectionView 的初始化
 
 
 3 UIcollectionView实现代理
 
 
 4 两个必须实现的方法
 
 
 
//关于UITableViewCell 和UICollectionViewCell的介绍
 
 
 
UITableview全面解析
在iOS开发中UITableView能够说是使用最普遍的控件,咱们平时使用的软件中处处均可以看到它的影子,相似于微信、QQ、新浪微博等软件基本上随处都是UITableView。固然它的普遍使用天然离不开它强大的功能,今天这篇文章将针对UITableView重点展开讨论。今天的主要内容包括:
UITableView有两种风格:UITableViewStylePlain和UITableViewStyleGrouped。这二者操做起来其实并无本质区别,只是后者按分组样式显示前者按照普通样式显示而已。你们先看一下二者的应用
1>分组样式
 
 
 
 
232318440491185.png 232318447533098.png
2>不分组样式
232318453621685.png 232318460032813.png
你们能够看到在UITableView中数据只有行的概念,并无列的概念,由于在手机操做系统中显示多列是不利于操做的。UITableView中每行数据都是一个UITableViewCell,在这个控件中为了显示更多的信息,iOS已经在其内部设置好了多个子控件以供开发者使用。若是咱们查看UITableViewCell的声明文件能够发如今内部有一个UIView控件(contentView,做为其余元素的父控件)、两个UILable控件(textLabel、detailTextLabel)、一个UIImage控件(imageView),分别用于容器、显示内容、详情和图片。使用效果相似于微信、QQ信息列表:
232318465964629.png 232318472532529.png
固然,这些子控件并不必定要所有使用,具体操做时能够经过UITableViewCellStyle进行设置,具体每一个枚举表示的意思已经在代码中进行了注释:
typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
    UITableViewCellStyleDefault, // 左侧显示textLabel(不显示detailTextLabel),imageView可选(显示在最左边)
    UITableViewCellStyleValue1, // 左侧显示textLabel,右侧显示detailTextLabel(默认蓝色),imageView(显示在最左边)
    UITableViewCellStyleValue2, // 左侧依次显示textLable(默认蓝色)和detailTextLabel,imageView可选(显示在最左边)
    UITableViewCellStyleSubtitle // 左上方显示textLabel,左下方显示detailTextLabel(默认灰色),imageView可选(显示在最左边)
}; 
数据源
 
因为ios是遵循MVC模式设计的,不少操做都是经过代理和外界沟通的,但对于数据源控件除了代理还有一个数据源属性,经过它和外界进行数据交互,对于UITableView设置完dateSource后须要实现UITableViewDataSource协议,在这个协议中定义了多种数据操做方法,下面经过建立一个简单的联系人管理进行演示
运行能够看到以下效果
 
你们在使用iPhone通讯录是会发现右侧能够按字母检索,使用起来很方便,其实这个功能使用UITableView实现很简单,只要是实现数据源协议的一个方法,构建一个分组标题的数组便可实现,数组元素的内容和组标题内容未必彻底一致,UITableView是按照数组元素的索引和每组数据索引顺序来定位的不是按内容查找
效果以下
 
232318487213245.png
须要注意的是上面几个重点方法的执行顺序,请看下图
232318493316130.png
 
值得指出的是生成单元格的方法并非一次所有调用,而是只会产生当前显示在界面上的单元格,当用户滚动操做时,再显示其余单元格
 
 注意:随着咱们的应用愈来愈复杂,可能常常须要调试程序,在ios中默认状况下不能定位到错误代码行,咱们能够经过以下设置让程序定位到出错代码行:Show the Breakpoint navigator - AddException breakpoint
 
代理
上面咱们已经看到通信录得简单实现,可是咱们发现单元格高度,分组标题高度以及尾部说明的高度都须要调整,此时就须要使用代理方法。UITalbleView代理方法有不少,例如监听单元格显示周期,监听单元格选择编辑操做,设置是否高亮显示单元格,设置行高等
1设置高度
 
 
2监听点击
在iOS 中点击某个联系人就能够呼叫这个联系人,这时就须要监听点击操做,这里就不演示呼叫联系人操做了,咱们演示一下修改人员信息的操做
 
在上面的代码中咱们经过修改模型来改变UI显示,这种方式是经典的MVC应用,在后面的代码中会常常。固然UI的刷新使用了UITableView的reloadData方法,该方法会从新调用数据源方法,包括计算分组,计算每一个分组的行数,生成单元格等刷新整个UITableView。固然这种方式在实际开发中是不可取的,咱们不能由于修改了一我的的信息就刷新这个UITableView,此时咱们须要采用局部刷新,局部刷新使用起来很简单,只须要调用UITableView的另外一个方法:
 
 
性能优化
前面已经说过UITableView中的单元格cell是在显示到用户但是区域后建立的,那么若是用户往下滚动就会继续建立显示在屏幕上的单元格,若是用户向下滚动返回到查看过的内容是一样会从新建立以前已经建立过的单元格。如此一来即便UITableView的内容不是太多。若是用户反复的上下滚动,内存也会瞬间飙升,更况且不少时候UITalbleView的内容是不少的(例如微博展现列表,基本向下滚动是没有底限的)
 
前面一节中咱们曾经提到过如何优化UIScrollView,当时就是利用有限的UIImageView动态切换其内容来尽量减小资源占用。一样的,在UITableView中也能够采用相似的方式,只是这时咱们不是在滚动到指定位置后更改滚动的位置而是要将当前没有显示的Cell从新显示在将要显示的Cell的位置而后更新其内容。缘由就是UITableView中的cell结构布局多是不一样的,经过从新定位是不可取的,而是须要重用已经不在界面显示的已建立过的Cell。
 
固然,听起来这么作比较复杂,其实实现起来很简单,由于UITableView已经为咱们实现了这中机制。在UITableView内部有一个缓存池,初始化时使用initWithStyle:(UITableViewCellStyle) reuseIdentifier:(NSString*)方法指定一个可重用标识,就能够将这个cell放到缓存池。而后在使用时使用指定的标识去缓存池中取得对应的cell而后修改cell内容便可
 
 
 
 
 
 UIScrollView
 UIScrollView 是滑动视图
 
 UIScrollView的初始化(若是是从xib或者故事板拖拽的不用初始化)
 
 
//属性
  contentSize                   //  UIScrollView内容大小的设置 (这个是很是重要的)
 
 pagingEnabled    //翻页属性
 
 
 
[_scrollView addSubview:imageView];//把内容视图直接添加便可
相关文章
相关标签/搜索