**
前言6&7
这是第5篇日记
记录的是最重要的UITableView来了.
**
UITableView
UItableview为什么会滚动,因为它继承了UIScrollView
UItableview的性能是非常好的,得益于系统的封装,所以这控件很重要. 就不要指望自己手写了.
1.
UItableview本身是不会显示数据的, 需要引用后设置 数据源 准守数据源协议
.dataSource = 准守数据源协议的类
.delegate = 准守代理源协议的类
.rowHeight 行高设置 值得注意的是 它会把全部行高平均,需要代理才能不同行高
.separatorColor 分割线颜色
.separatorStyle 分割线样式 枚举 None可取消分割线
.tableHeaderView 头view (一般放入广告view)
.tableFooterView 尾view
reloadData //重新加载 但是全部组都会刷
reloadRowsAtIndexPaths. //刷新指定的行 参1.多少行数组多少下标 参2.动画枚举 需要NSIndexPath
reloadSections //刷指定的组
NSIndexPath对象有参初始 indexPathorRow:xx inSction:xx
scrollToRowAtIndexPath:NSIndexPath atScrollPosition:枚举滚到的位置 animated: //滚动到指定行
注意:
.Styl默认为Plain
这个时候如果你实现了分组方法,但是设置了Plain,则不会有空行且会头标题保留
Grouped 则有空行.无组标题
2.
UItableview实现它的数据源协议方法
(NSInteger)numberOfSectionsInTableView //显示几组 默认1组
(NSInteger)numberOfRowsInSection //每组几行数据 必须实现
(UITableViewCell )cellForRowAtIndexPath //组行单元格对象 必须实现
(NSString )titleForHeardInSection //每组头标题
(NSString )titleForFooterInSection //每组尾标题
viewForHeardInSection /Footer 可返回每组组头view
但是必须用UItableviewHearderFooterview进行返回. 这个具体的总结放在第7章说
(NSArray )sectionIndexTitlesForTableView //返回右侧索引条
会根据数组的第几个,点击后自动根据数组下标,跳转到对应组
NSIndexPath 对象里面包含了 section组 row行
UItableView的代理方法
-(CGFloat)heightForRowAtIndexPath //返回每行的高度
-(void)didSelectRowAtIndexPath //当选中一个单元格
3.
UITableVIewCell对象是包含在table里面的单元格数据对象
参1 initWithStyle 样式枚举
参2 reuseIdentifier 重用标识符
UITableVIewCell默认提供了 textTable组件,imagView组件,detailTextLable组件
按照样式枚举进行使用,系统会调用这组件的内容进行展示.
对于UItableVIewCell样式枚举的解释
1.UITableViewCellStyleDefault (只能使用提供的 标签组件 和 图片组件)
------// Simple cell with text label and optional image view (behavior of UITableViewCell in iPhoneOS 2.x)
2.UITableViewCellStyleValue1 (左一个标签,右一个标签,没间距 和图片组件)
------// Left aligned label on left and right aligned label on right with blue text (Used in Settings)
3.UITableViewCellStyleValue2 (和上面来说 对齐不一样, 有间距 没图片组件)
------// Right aligned label on left with blue text and left aligned label on right (Used in Phone/Contacts)
4.UITableViewCellStyleSubtitle (对于默认的样式,增加了一个detailTextLable)
------// Left aligned label on top and left aligned label on bottom with gray text (Used in iPod).
accessoryType 属性可以设置单元格的附件 (如:小箭头), 为枚举类型 none默认
------// UITableVIewCellAcessoryCheckmark 对勾右边
------// UITableVIewCellAcessoryDetailButton 详细右边
------// UITableVIewCellAcessoryDisclosureIndicator 小箭头右边
------// UITableVIewCellAcessoryDetailDiscolosureButton 详细和小箭头都有
accessoryView 自定义附件. 上文只能使用系统默认的.
backgroundcolor 设置单元格背景颜色.
backgroundview 设置单元格背景view
selectedBackgroundVIew 设置单元格选中的背景view
注意项:
当你在tablefooter设置view的时候,即使frame设置,默认也是有的.
但是y,w都是没作用的. 应该用一个看不到的view对子控件设置.
UITableVIewCell的重用
当在table里面一直向下滑动,系统会一直创建cell,这样是非常浪费资源的.
在仅需要加载的范围内,首次加载资源后放入缓存池里,这样可以在下滑时改数据不创对象,可以节约资源
在带参初始化UItableviewcell参数reuseIdentifier时放入一个重用id ,建议重用id使用static修饰符.
tableview 中 dequeueReusableCellWithIdentifier 通过id, 可接收到cell,如缓存池中没有,那么要判断后重创
自定义UItableVIewCell
通过自定义的xib,拖入一个cell控件,进行自定义的摆放.
创建对应继承的UItableviewcell的类.属性绑定,提供方法
记得用类拓展@interface xxx()@end
因为要用mainbundle加载nib所以为了重用要在board中设置identifier
弊端:无法有动态的需求,比如要动态新增加一个组件.
-(void)awakeFromNib{} xib被唤醒的时候会执行 uiview的xib内控件都可以使用
通过代码自定义cell ,创建个类继承cell, 记得super initwithsytle
计算出这些文字,取决于高度决定了多少宽度
字符串对象 boundingRectWithSize:CGSizeMake(MAXFLOAT,MAXFLOAT) options:计算方式
attributes:@{NSFOntAttributeName:[UIFont systemFontOFSize:xx]} context:nil
返回出Rect 可以. 只得到size
如果不限制宽,那么高是没作用的,毕竟可以无限延伸.何必要高.
如果限制了宽,那么文字的自动换行要开,否则lable多高,都没办法换行.
计算方式:NSStringDrawingUserLineFragmentOrigin
协议代理补充
创建协议内需要准许的方法
@protocol xxx{
}
@property(xx,weak)id<准许协议的属性>delegate //属性中必须要用weak 不然内存泄漏
为什么?强指针时如下
类1创建了类2对象, 设置了类2对象指向了类1
届时 类1指向了类2 类2指向了类1
加入类1要被释放,但类2还指向类1, ok就无法释放了…
类 respondsToSelect:SEL() //方法实现就返回ture
//等待多时秒后执行代码块
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(1.0*NSEC_PER_SEC))))
dispatch_get_main+queue()
UITableViewController
它是通过继承了UIVIewController针对table的一个控制
这个继承后新增了 默认的数据源和协议代理
并且默认增加了 self.tableview控件,就不需要拖线了
当然里面还有这self.view 因为这是它父类的属性… 直说它就和tableview一样.
这是对于uitableview的初步认识的代码总结.这篇就这样吧