UITableView

UITableView



//转载请注明出处--本文永久连接:http://www.cnblogs.com/ChenYilong/p/3496969.htmlhtml

本文对应pdf文档下载连接,猛戳->:UITableView.pdf
1.6 MB
web

(https://www.evernote.com/shard/s227/sh/fbffb63f-55ba-441f-945e-5ba511812d0d/a0e328ca59db246f3926b92f52bf6d38)缓存

 

UITableViewapp

技术博客http://www.cnblogs.com/ChenYilong/   新浪微博http://weibo.com/luohanchenyilong

基本控件文档 - 的UITableView


 
 


l   iOS 中显示数据列表最经常使用的一个控件,支持垂直滚动

   


UITableView 的两种内置样式
UITableViewStylePlain UITableViewStyleGrouped

 

数据源 (dataSource) 和代理 (delegate)
l  UITableView 须要一个数据源 (dataSource) 来显示数据 , UITableView 会向数据源查询一共有多少行数据以及每一行显 示什么数据等。没有设置数据源的 UITableView 只是个空壳。凡 是遵照 UITableViewDataSource 协议的 OC 对象,均可以 是 UITableView 的数据源
l   一般都要为 UITableView 设置代理对象 (delegate), 以便 在 UITableView 触发一下事件时作出相应的处理,好比选中了某 一行。凡是遵照了 UITableViewDelegate 协议的 OC 对象,均可 以是 UITableView 的代理对象 
l   通常会让控制器充当 UITableView dataSource delegate 



//转载请注明出处--本文永久连接:http://www.cnblogs.com/ChenYilong/p/3496969.htmlide




UITableViewDataSource

l  @required
u  -(NSInteger) tableView :(UITableView*)tableView
numberOfRowsInSection :(NSInteger)section;
section 分区一共有多少行
u  -(UITableViewCell*) tableView :(UITableView*)tableView cellForRowAtIndexPath :(NSIndexPath *)indexPath;
建立第 section 分区第 row 行的 UITableViewCell 对象 (indexPath 包含 了 section row)
l  @optional
u  -(NSInteger) numberOfSectionsInTableView :(UITableView
*)tableView;  一共有多少个分区
u  -(NSString*) tableView :(UITableView*)tableView
titleForHeaderInSection :(NSInteger)section; section 分区的头部标题

UITableViewDataSource
u  -(NSString*) tableView :(UITableView*)tableView titleForFooterInSection :(NSInteger)section;
section 分区的底部标题
u  -(BOOL) tableView :(UITableView*)tableView
canEditRowAtIndexPath :(NSIndexPath *)indexPath;
某一行是否能够编辑 ( 删除 )
u  -(BOOL) tableView :(UITableView*)tableView canMoveRowAtIndexPath :(NSIndexPath *)indexPath;
某一行是否能够移动来进行从新排序
u  -(NSArray*) sectionIndexTitlesForTableView :(UITableView *)tableView;
UITableView 右边的索引栏的内容

UITableViewDelegate
l  - (void) tableView :(UITableView *)tableView  didSelectRowAtIndexPath :(NSIndexPath *)indexPath
选中了 UITableView 的某一行
l  - (CGFloat) tableView :(UITableView *)tableView
heightForRowAtIndexPath :(NSIndexPath *)indexPath  某一行的高度
l  - (CGFloat) tableView :(UITableView *)tableView  heightForHeaderInSection :(NSInteger)section
section 分区头部的高度
l  - (CGFloat) tableView :(UITableView *)tableView
heightForFooterInSection :(NSInteger)section section 分区尾部的高度

UITableViewDelegate
l  - (UIView *) tableView :(UITableView *)tableView  viewForHeaderInSection :(NSInteger)section
section 分区头部显示的视图
l  - (UIView *) tableView :(UITableView *)tableView
viewForFooterInSection :(NSInteger)section
section 分区尾部显示的视图
l  - (NSInteger) tableView :(UITableView *)tableView  indentationLevelForRowAtIndexPath :(NSIndexPath *)indexPath
设置每一行的等级缩进 ( 数字越小,等级越高 )

UITableViewCell
l   UITableView 的每一行都是一个 UITableViewCell, 经过 dataSource  tableView : cellForRowAtIndexPath : 方法来初始化每一行 
l   UITableViewCell UIView 的子类,内部有个默认的子视图 : contentView  contentView UITableViewCell 所显示内容的父视图,并负责显示一些 辅助指示视图。辅助指示视图的做用是显示一个表示动做的图标,能够经过设 置 UITableViewCell accessoryType 来显示,默认 是 UITableViewCellAccessoryNone( 不显示辅助指示视图 ) ,其余值以下 : 
u UITableViewCellAccessoryDisclosureIndicator  
u UITableViewCellAccessoryDetailDisclosureButton
u   UITableViewCellAccessoryCheckmark 

//转载请注明出处--本文永久连接:http://www.cnblogs.com/ChenYilong/p/3496969.html布局



UITableViewCell contentView
l  contentView 下默认有 3 个子视图,其中的 2 个是 UILabel( 通 过 UITableViewCell textLabel detailTextLabel 属性访问 ) ,第 3  个是 UIImageView( 经过 UITableViewCell imageView 属性访问 )
l  UITableViewCell 还有一个 UITableViewCellStyle 属性,用于决定使 用 contentView 的哪些子视图,以及这些子视图在 contentView 中的位置
UITableViewCellStyleDefault
UITableViewCellStyleSubtitle
UITableViewCellStyleValue1
UITableViewCellStyleValue2



UITableViewCell 对象的重用原理
l  iOS 设备的内存有限,若是用 UITableView 显示成千上万条数据,就需 要成千上万个 UITableViewCell 对象的话,那将会耗尽 iOS 设备的 内存。要解决该问题,须要重用 UITableViewCell 对象
l  重用原理 :当滚动列表时,部分 UITableViewCell 会移出窗口 , UITableView 会将窗口外的 UITableViewCell 放入一个对象池中 ,等待重用。当 UITableView 要求 dataSource 返 回 UITableViewCell 时, dataSource 会先查看这个对象池,若是池 中有未使用的 UITableViewCell , dataSource 会用新的数据配置这 个 UITableViewCell ,而后返回给 UITableView ,从新显示到窗 口中,从而避免建立新对象

UITableViewCell 对象的重用原理
l   还有一个很是重要的问题:有时候须要自定义 UITableViewCell( 用一个子类 继承 UITableViewCell) ,并且每一行用的不必定是同一 种 UITableViewCell( 如短信聊天布局 ) ,因此一个 UITableView 可能拥有不 同类型的 UITableViewCell ,对象池中也会有不少不一样类型 的 UITableViewCell ,那么 UITableView 在重用 UITableViewCell 时可能 会获得错误类型的 UITableViewCell 
l   解决方案 : UITableViewCell 有个 NSString * reuseIdentifier 属性,可 以在初始化 UITableViewCell 的时候传入一个特定的字符串标识来设 置 reuseIdentifier( 通常用 UITableViewCell 的类名 ) 。当 UITableView  要求 dataSource 返回 UITableViewCell 时,先经过一个字符串标识到对象池 中查找对应类型的 UITableViewCell 对象,若是有,就重用,若是没有,就传 入这个字符串标识来初始化一个 UITableViewCell 对象
一个 UITableView 中不一样类型的 UITableViewCell
 

重用 UITableViewCell 对象
- (UITableViewCell *) tableView :(UITableView *)tableView
cellForRowAtIndexPath :(NSIndexPath *)indexPath {
static NSString *identifier = @"UITableViewCell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier :identifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithStyle :UITableViewCellStyleDefault reuseIdentifier :identifier] autorelease];
}
cell.textLabel.text = [NSString stringWithFormat:@"Text %i",
indexPath.row];
     return cell;
}

//转载请注明出处--本文永久连接:http://www.cnblogs.com/ChenYilong/p/3496969.htmlpost


UITableViewCell 的经常使用属性
l  设置背景
u  backgroundView
l  设置被选中时的背景视图
u  selectedBackgroundView
l  selectionStyle 属性可设置 UITableViewCell 被选中时的 背景颜色 :  u UITableViewCellSelectionStyleNone  没有颜色
u  UITableViewCellSelectionStyleBlue  蓝色(默认)
u  UITableViewCellSelectionStyleGray  灰色

自定义 UITableViewCell

l  通常有两种方式 :
1  用一个 xib 文件来 UITableViewCell 的内容 在这设置字符串标识,以便重用
2  经过代码往 UITableViewCell contentView 中添加子视图,在 初始化方法 ( 好比 init initWithStyle:reuseIdentifier: )  中添加子控件,在 layoutSubviews 方法中分配子控件的位置和大小

UITableView 的编辑模式
l  UITableView 有个 editing 属性,设置为 YES 时,能够进入编辑模式。在编 辑模式下,能够管理表格中的行,好比改变行的排列顺序、增长行、删除行 ,但不能修改行的内容
l  多种方式开启编辑模式
u @property(nonatomic,getter=isEditing)BOOLediting
u  -(void)setEditing:(BOOL)editinganimated:(BOOL)animated

删除 UITableView 的行
l  首先要开启编辑模式
l  实现 UITableViewDataSource 的以下方法:
- (void) tableView :(UITableView *)tableView commitEditingStyle  :(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath  :(NSIndexPath *)indexPath {
//  若是 UITableView 交的是删除指令
if (editingStyle == UITableViewCellEditingStyleDelete) {
//  删除真实数据
// [self.data removeObjectAtIndex:indexPath.row];
//  删除 UITableView 中的某一行 ( 带动画效果 )
      [tableView deleteRowsAtIndexPaths:[NSArray
     arrayWithObject:indexPath]
     withRowAnimation:UITableViewRowAnimationLeft];
//  若是不考虑动画效果,也能够直接 [tableView reload];  }

}
移动 UITableView 的行
l  首先要开启编辑模式
l  实现 UITableViewDataSource 的以下方法 ( 若是没有实现此方法,将没法换行 )
- (void) tableView :(UITableView *)tableView moveRowAtIndexPath  :(NSIndexPath *)sourceIndexPath  toIndexPath :(NSIndexPath
*)destinationIndexPath {
int from = sourceIndexPath.row; int to = destinationIndexPath.row; if (from == to) return;
//  交换数据
// [self.data exchangeObjectAtIndex:from
withObjectAtIndex:to];
}

选中 UITableView 的行
l  当某行被选中时会调用此方法 (UITableViewDelegate 的方法 )
- (void) tableView :(UITableView *)tableView didSelectRowAtIndexPath :(NSIndexPath *)indexPath {
// 取消选中某一行 , 让被选中行的高亮颜色消失 ( 带动画效果 )  [tableView deselectRowAtIndexPath:indexPath
animated:YES];
}



 
UITableView 经常使用方法
l  - (id) initWithFrame :(CGRect)frame  style :(UITableViewStyle)style  初始化一个 UITableView ,而且设置表格样式
l   - (void) reloadData  从新访问数据源,刷新界面 
l   - (NSInteger) numberOfSections  分区的个数 
l   - (NSInteger) numberOfRowsInSection :(NSInteger)section 
section 分区的行数 
l  - (UITableViewCell *) cellForRowAtIndexPath :(NSIndexPath *)indexPath
经过 indexPath 找到对应的 UITableViewCell 对象
l  - (void) setEditing :(BOOL)editing  animated :(BOOL)animated
是否要开启编辑模式
l  - (void) deselectRowAtIndexPath :(NSIndexPath *)indexPath  animated  :(BOOL)animated
取消选中某一行 , 让被选中行的高亮颜色消失 ( 带动画效果 )

UITableView 经常使用方法
l  - (id) dequeueReusableCellWithIdentifier :(NSString *)identifier
经过 identifier ( 缓存 ) 池中找到对应的 UITableViewCell 对象
l  - (void) deleteRowsAtIndexPaths :(NSArray *)indexPaths  withRowAnimation :(UITableViewRowAnimation)animation
移除 indexPaths 范围内的全部行
l   @property(nonatomic,readonly) UITableViewStyle style  表格样式 
l   @property(nonatomic,assign)  id dataSource  数据源 
l   @property(nonatomic,assign)  id delegate  代理 
l   @property(nonatomic,getter= isEditing )  BOOL editing  是否为编辑模式 
l   @property(nonatomic) UITableViewCellSeparatorStyle separatorStyle  设置分隔线的样式 
l  @property(nonatomic,retain)  UIColor *separatorColor  设置分隔线的颜色

//转载请注明出处--本文永久连接:http://www.cnblogs.com/ChenYilong/p/3496969.html优化




UITableView 经常使用方法
l  @property(nonatomic,retain)  UIView *tableHeaderView  表头显示的视图
l  @property(nonatomic,retain)  UIView *tableFooterView  表尾显示的视图
l  @property(nonatomic)  BOOL allowsSelection
是否容许选中行
l  @property(nonatomic)  BOOL allowsSelectionDuringEditing  是否容许在编辑模式下选中行
l  @property(nonatomic)  BOOL allowsMultipleSelection  是否容许选中多行
l  @property(nonatomic)  BOOL allowsMultipleSelectionDuringEditing  是否容许在编辑模式下选中多行

UITableViewController
l  UIViewController 的子类, UITableViewController 默认扮演了 3 种角色 : 视 图控制器、 UITableView 的数据源和代理
l  UITableViewController view 是个 UITablView, UITableViewController  负责设置和显示这个对象。 UITableViewController 对象被建立后,会将这 个 UITableView 对象的 dataSource delegate 指向 UITableViewController 本身




例子 1- 城市信息



例子 2- 淘宝商品列表



例子3 - 数据删除


例子4 - 编辑模式



例子 5- 九宫格



例子 6- 天猫列表

UITableView (PDF)

©  chenyilong. Powered by  Postach.io


UITableView


 
UITableView
技术博客http://www.cnblogs.com/ChenYilong/  新浪微博http://weibo.com/luohanchenyilong  


UITableView 内置了两种样式: UITableViewStylePlain UITableViewStyleGrouped

< UITableViewDataSource , UITableViewDelegate ]] ]]>  里的方法:
tableView处理步骤
#pragma mark 1. 有多少组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
#pragma mark 2. section 组头部控件有多高
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
#pragma mark 3. section 组有多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
#pragma mark 4.indexPath 这行的 cell 有多高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark 5.indexPath 这行的 cell 长什么样子
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark 6. section 组头部显示什么控件
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section


- (
NSInteger )numberOfSectionsInTableView:( UITableView  *)tableView

- (
NSInteger )tableView:( UITableView  *)tableView numberOfRowsInSection:( NSInteger )section

//每当有一个cell进入视野屏幕就会调用,因此在这个方法内部就须要优化。
- ( UITableViewCell  *)tableView:( UITableView  *)tableView cellForRowAtIndexPath:( NSIndexPath  *)indexPath{
if(cell==nil){
//在这里面作建立的工做。循环优化。防止刷新cell进入屏幕的时候重复的建立
}
}

//当调用reloadData的时候,会从新刷新调用数据源内全部方法,其余事情都不会作呀
[self  reloadData ]

//这个方法只有在一开始有多少条数据才会算多少个高度,这个方法只会调用一次,可是每次reloadData的时候也会调用
//并且会一次性算出全部
cell 的高度,好比有 100 条数据,一次性调用 100
- ( CGFloat )tableView:( UITableView  *)tableView heightForRowAtIndexPath:( NSIndexPath  *)indexPath




-(
NSArray  *)sectionIndexTitlesForTableView:( UITableView  *)tableView  //右侧索引

     -(
void )tableView:( UITableView  *)tableView didSelectRowAtIndexPath:( NSIndexPath  *)indexPath  //行点击事件

NSIndexPath  *path = [ self . tableView  indexPathForSelectedRow ];  //得到被选中的indexPath能够获得section,row

[
self . tableView  reloadRowsAtIndexPaths :[ self . tableView  indexPathsForSelectedRows ] withRowAnimation : UITableViewRowAnimationNone ];  //刷新table指定行的数据
      
[
self . tableView  reloadData ];  //刷新table全部行的数据


UITableView
经常使用属性:
UITableView  *tableView = [[ UITableView  alloc ] initWithFrame : CGRectMake ( 0 ,  0 ,  320 , 460 )  style : UITableViewStylePlain ];  //  初始化表格
分隔线属性 
tableView.
separatorStyle  =  UITableViewCellSeparatorStyleSingleLine ; //UITableViewCellSeparatorStyleNone;
[ self . tableView  setSeparatorStyle : UITableViewCellSeparatorStyleNone ];  // 取消分隔线
     tableView.
separatorColor  = [ UIColor  lightGrayColor ];

条目多选
tableView.
allowsMultipleSelection  =  YES ;
     
//  设置标题行高
[
_ tableView  setSectionHeaderHeight : kHeaderHeight ];
     [
_ tableView  setSectionFooterHeight : 0 ];

//  设置表格行高
[
_ tableView  setRowHeight : 50 ];

// 设置背景色
self . tableView . backgroundView   优先级高,若是要设置 backgroundColor 的时候要先把 view 设置为 nil
self . tableView .backgroundColor

// tableView 的头部或者尾部添加 view,footerView 宽度是不用设置的
      xxxView.bounds = CGRectMake(0,0,0,height);
self . tableView . tableFooterView  =xxxView;
       self . tableView . tableHeaderView  =xxxView;

UIButton  *bt = ( UIButton *)[ self . contentView  viewWithTag :i+ 100 ];

增长 tableview 滚动区域
self . tableView . contentInset  =  UIEdgeInsetsMake ( 0 ,  0 , xx,  0 );  





UITableViewCell

技术博客http://www.cnblogs.com/ChenYilong/  新浪微博http://weibo.com/luohanchenyilong  



//建立UITableViewCell       
UITableViewCell  *cell = [[ UITableViewCell  alloc ]
initWithStyle : UITableViewCellStyleSubtitle  reuseIdentifier : nil ];
      
[cell.
textLabel  setBackgroundColor :[ UIColor  clearColor ]];//  清空标签背景颜色 
      
      cell.
backgroundView  =xx;  //设置背景图片
      cell. backgroundVColor  =xx;
      cell.
selectedBackgroundView  = selectedBgView; // 设置选中时的背景颜色

      
cell.accessoryView = xxxView;
  // 设置右边视图
[cell  setAccessoryType : UITableViewCellAccessoryNone ]; // 设置右侧箭头

[ self  setSelectionStyle : UITableViewCellSelectionStyleNone ];  // 选中样式
cell. selectionStyle  =  UITableViewCellSelectionStyleBlue ;

//
设置 cell 的高度
- (
CGFloat )tableView:( UITableView  *)tableView heightForRowAtIndexPath:( NSIndexPath  *)indexPath

contentView 下默认有 3 个子视图,其中的 2 个是 UILabel ,经过 textLabel detailTextLabel 属性访问,第 3 个是 UIImageView ,经过 imageView 属性访问 .
UITableViewCellStyleDefault, UITableViewCellStyleValue1, UITableViewCellStyleValue2, UITableViewCellStyleSubtitle

#pragma mark -  从新调整 UITalbleViewCell 中的控件布局
- ( void )layoutSubviews{
[
super  layoutSubviews ];

}
cell
  里面还有一个 contentView
UITableViewCell表格优化
UITableViewCell 对象的重用原理:
重用原理:当滚动列表时,部分 UITableViewCell 会移出窗口, UITableView 会将窗口外的 UITableViewCell 放入一个 对象池 中,等待重用。当 UITableView 要求 dataSource 返回 UITableViewCell 时, dataSource 会先查看这个对象池,若是池中有未使用的 UITableViewCell dataSource 会用新的数据配置这个 UITableViewCell ,而后返回给 UITableView ,从新显示到窗口中,从而避免建立新对象
还有一个很是重要的问题:有时候须要自定义
UITableViewCell (用一个子类继承 UITableViewCell ),并且每一行用的不必定是同一种 UITableViewCell (如短信聊天布局),因此一个 UITableView 可能拥有不一样类型的 UITableViewCell ,对象池中也会有不少不一样类型的 UITableViewCell ,时可能会获得错误类型的 UITableViewCell 那么 UITableView 在重用 UITableViewCell 。解决方案: UITableViewCell 有个 NSString * reuseIdentifier 属性,能够在初始化 UITableViewCell 的时候传入一个特定的字符串标识来设置 reuseIdentifier (通常用 UITableViewCell 的类名)。当 UITableView 要求 dataSource 返回 UITableViewCell 时,先经过一个字符串标识到对象池中查找对应类型的 UITableViewCell 对象,若是有,就重用,若是没有,就传入这个字符串标识来初始化一个 UITableViewCell 对象

/**
单元格优化
1.
  标示符统一,使用 static 的目的能够保证表格标示符永远只有一个
2.
  首先在缓冲池中找名为 "myCell" 的单元格对象
3.
  若是没有找到,实例化一个新的 cell
**/

- (
UITableViewCell  *)tableView:( UITableView  *)tableView cellForRowAtIndexPath:( NSIndexPath  *)indexPath{
static  NSString  *cellIdentifier =  @"myCell" ;
UITableViewCell  *cell = [tableView dequeueReusableCellWithIdentifier :cellIdentifier];
//使用这种方法不用判断下面的cell
UITableViewCell  *cell = [tableView dequeueReusableCellWithIdentifier :cellIdentifier  forIndexPath:indexPath ];
if  (cell ==  nil ) {      
      cell = [[
UITableViewCell  alloc ] initWithStyle : UITableViewCellStyleDefault reuseIdentifier :cellIdentifier];
     }
return  cell;
}

表格的编辑模式
删除、插入 
- (
void )setEditing:( BOOL )editing animated:( BOOL )animated;  开启表格编辑状态 

- (
UITableViewCellEditingStyle )tableView:( UITableView  *)tableView editingStyleForRowAtIndexPath:( NSIndexPath  *)indexPath{
返回表格编辑编辑样式。不实现默认都是删除
return editingStyle : UITableViewCellEditingStyleDelete, UITableViewCellEditingStyleInsert

}

- (
void )tableView:( UITableView  *)tableView commitEditingStyle:( UITableViewCellEditingStyle )editingStyle forRowAtIndexPath:( NSIndexPath *)indexPath{
//根据editingStyle处理是删除仍是添加操做
完成删除、插入操做刷新表格
- ( void )insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

-(
void )deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
}

移动
- (
void )tableView:( UITableView  *)tableView moveRowAtIndexPath:( NSIndexPath *)sourceIndexPath toIndexPath:( NSIndexPath  *)destinationIndexPath
sourceIndexPath 移动的行
destinationIndexPath 目标的行

自定义表格行UITableViewCell
storyboard 方式建立:
直接拖到 UITableView 里面设置 UITableViewCell
注意:
1. 经过 XIB 或者 Storyboard 自定义单元格时,在 xib Storyboard 里面须要指定单元格的可重用标示符 Identifier

2.注意表格的优化中的差异
Storyboard 二者等效
xxCell  *cell = [tableView  dequeueReusableCellWithIdentifier :CellIdentifier];
xxCell  *cell1 = [tableView  dequeueReusableCellWithIdentifier :CellIdentifier forIndexPath :indexPath];

xib 文件中有差异:
第一种状况,只能在iOS 6以上使用,若是在viewDidLoad注册了nib文件,而且指定了“单元格”的可重用标示符,那么 
      dequeueReusableCellWithIdentifier:
      dequeueReusableCellWithIdentifier:forIndexPath:
      方法是等效的。若是在viewDidLoad中注册了nib文件,表格缓冲池中的管理,有系统接管!

第二种状况,是在iOS 4以上都可以使用,若是没有在viewDidLoad注册nib文件,那么,只能使用
      dequeueReusableCellWithIdentifier:而且须要判断cell没有被实例化,并作相应的处理


在代码建立中差异:
用代码建立
cell 中的处理和 nib 同样,注册了 cell 就有系统接管而且能够用带 forIndexPath 的方法,没有注册就要本身去实例化 cell ,不能用带 forIndexPath 的方法
[tableView  registerClass :Xxx Cell  class ]  forCellReuseIdentifier : @"xxCell" ];

xib 方式建立:
//注册Identifier 
- (
void )viewDidLoad{
     [
super  viewDidLoad ];
/**
     
  注意:如下几句注册 XIB 的代码,必定要在 viewDidLoad 中!
     
  注册 XIB 文件 , 得到根视图,而且转换成 TableView, tableView 注册 xib
      Identifier
名要在 xib 文件中定义,而且保持一致
      **/

UINib  *nib = [ UINib  nibWithNibName : @"BookCell"  bundle :[ NSBundle  mainBundle ]];
UITableView  *tableView = ( UITableView  *) self . view ;
     [tableView
  registerNib :nib  forCellReuseIdentifier : @"bookCell" ]; 
}

//没有注册Identifier只能使用下面方法
static  NSString  *CellIdentifier =  @"bookCell" ;
BookCell  *cell = [tableView  dequeueReusableCellWithIdentifier :CellIdentifier];
if  (cell ==  nil ) {
      cell = [[
BookCell  alloc ] initWithStyle : UITableViewCellStyleDefault reuseIdentifier :CellIdentifier];
      
NSBundle  *bundle = [ NSBundle  mainBundle ];
      
NSArray  *array = [bundle  loadNibNamed : @"BookCell"  owner : nil  options : nil ];
      cell = [array
  lastObject ];
     }


代码方式建立:
创建 UITableViewCell 的类,继承 UITableViewCell
cell 里面加入 view 的时候注意点:
// 新建的组件放入 contentView
[
self . contentView  addSubview :xxView]; 

//
设置图片拉伸属性 stretch
UIImage  *normalImage = [UIImage imageNamed: @"xx.png" ];
normalImage = [normalImage
  stretchableImageWithLeftCapWidth :
normalImage.
size . width  /  2  topCapHeight :normalImage. size . height  /  2 ];

//在tableView里面viewDiDLoad里面要注册cell类
[tableView  registerClass :Xxx Cell  class ]  forCellReuseIdentifier : @"xxCell" ];

自定义表格中Header
//自定义表格在这个方法中定义
-( UIView  *)tableView:( UITableView  *)tableView viewForHeaderInSection:( NSInteger )section
-(
NSString  *)tableView:( UITableView  *)tableView titleForHeaderInSection:( NSInteger )section
 
©  chenyilong. Powered by  Postach.io
相关文章
相关标签/搜索