TableView

来源:互联网 发布:拦截软件修改数据 编辑:程序博客网 时间:2024/05/30 05:14

老规矩,先给出参考资料http://no001.blog.51cto.com/1142339/637651

             加载数据详解:http://www.cnblogs.com/top5/archive/2012/05/17/2506553.html

                    方法查询:http://blog.csdn.net/huifeidexin_1/article/details/7678986

TableView原理

关键字:重用机制

TableView(以下简称TV)在ios中是依靠UITableView实现的,在utv的头文件中,有两个可变的数组:visiableCells和reusableTableCells。

在显示之初,reusableTableCells为空,dequeueReusableCellWithIdentifier:CellIdentifier(这个方法作用是给cell设置一个表示符)返回nil。

创建cell,并为其设置标示符。initWithStyle:    reuseIdentifier:会创建适合屏幕最大的cell,并指定重用标示符,并将cell加入到visiableCells数组。这时reusableTableCells为空。

向下拖动tv时,当cell1完全移出屏幕,并且cell11(刚刚被alloc出来)完全显示出来的时候,cell11加入到visiableCells,cell1移出visiableCells,cell1加入到reusableTableCells。

继续向下拖动,因为reusableTableCells中已经有值了(cell1),所以当需要显示新的cell时,cellForRowAtIndexPath再次调用,tableViewdequeueReusableCellWithIdentifier:CellIdentifier

将返回cell1。cell1从reusableTableCells移出,加入visiableCells;cell2移出visiableCells,加入到reusableTableCells。

cell在移出visiableCells时需要清除数据,在加入时要载入数据。

 

根据原理,可以知道使用一个简单的tableview的简单流程(最基础功能)

(三个基础方法都要实现:

1.返回tableview有多少个组

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

2.返回tableview一个组有多少行

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

3.编辑tableview里的具体的cell

- (UITableViewCell *)tableView:(UITableView *)tableView    cellForRowAtIndexPath:(NSIndexPath *)indexPath 

 

下面是使用的简单的步骤

1.给实现tv的类添加协议

<UITableViewDataSource, UITableViewDelegate>

2.创建重用标示符

   static    NSString *CellIndentifier = @"Contact";

3.创建带有重用标示的cell,表示这个cell可被重复使用

   UITableViewCell  *cell = [tableView dequeueReusableCellWithIdentifier:@“Contact”]

   if (cell == nil) {

       cell =[[[UITableViewCell    alloc]initWithStyle:UITableViewCellStyleDefault

                                                     reuseIdentifier:CellIndentifier]autorelease];

   }

4.给每行cell添加数据

   NSString *cellValue = [listOfContactsobjectAtIndex:indexPath.row];

   cell.textLabel.text = cellValue;

 

 

 

 

 

 

 

 

这个是参考资料中的,贴上来方便查询

-、建立 UITableView

DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)];

[DataTable setDelegate:self];

[DataTable setDataSource:self];

[self.view addSubview:DataTable];

[DataTable release];

 

二、UITableView各Method说明

 

//Section总数

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{

return TitleData;

}

 

// Section Titles

//每个section显示的标题

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

return @"";

}

 

//指定有多少个分区(Section),默认为1

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

return 4;

}

 

//指定每个分区中有多少行,默认为1

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

}

 

//绘制Cell

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";

 

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:

                            SimpleTableIdentifier];

   if (cell == nil) {  

       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault

                                      reuseIdentifier: SimpleTableIdentifier] autorelease];

}

cell.imageView.image=image;//未选cell时的图片

cell.imageView.highlightedImage=highlightImage;//选中cell后的图片

cell.text=//.....

return cell;

}

 

//行缩进

-(NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{

NSUInteger row = [indexPath row];

return row;

}

 

//改变行的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

   return 40;

}

 

//定位

[TopicsTable setContentOffset:CGPointMake(0, promiseNum * 44 + Chapter * 20)];

 

//返回当前所选cell

NSIndexPath *ip = [NSIndexPath indexPathForRow:row inSection:section];

[TopicsTable selectRowAtIndexPath:ip animated:YES scrollPosition:UITableViewScrollPositionNone];

 

[tableView setSeparatorStyle:UITableViewCellSelectionStyleNone];

 

//选中Cell响应事件

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

[tableView deselectRowAtIndexPath:indexPath animated:YES];//选中后的反显颜色即刻消失

}

 

//判断选中的行(阻止选中第一行)

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

   NSUInteger row = [indexPath row];

   if (row == 0)

       return nil;

  

   return indexPath;

}

 

//划动cell是否出现del按钮

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {

}

 

//编辑状态

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle

forRowAtIndexPath:(NSIndexPath *)indexPath

{

[topicsTable setContentSize:CGSizeMake(0,controller.promiseNum * 44)];

//右侧添加一个索引表

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{

}

//返回Section标题内容

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

}

//自定义划动时del按钮内容

- (NSString *)tableView:(UITableView *)tableView

titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath

//跳到指的row or section

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:NO];

三、在UITableViewCell上建立UILable多行显示

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

   static NSString *CellIdentifier = @"Cell";   

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

   if (cell == nil) {

       cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

 UILabel *Datalabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 320, 44)];

 [Datalabel setTag:100];

 Datalabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

 [cell.contentView addSubview:Datalabel];

 [Datalabel release];

}

UILabel *Datalabel = (UILabel *)[cell.contentView viewWithTag:100];

[Datalabel setFont:[UIFont boldSystemFontOfSize:18]];

Datalabel.text = [data.DataArray objectAtIndex:indexPath.row];

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

   return cell;

}

//选中cell时的颜色

typedef enum {

   UITableViewCellSelectionStyleNone,

   UITableViewCellSelectionStyleBlue,

   UITableViewCellSelectionStyleGray

} UITableViewCellSelectionStyle

//cell右边按钮格式

typedef enum {

   UITableViewCellAccessoryNone,                   // don't show any accessory view

   UITableViewCellAccessoryDisclosureIndicator,    // regular chevron. doesn't track

   UITableViewCellAccessoryDetailDisclosureButton, // blue button w/ chevron. tracks

   UITableViewCellAccessoryCheckmark               // checkmark. doesn't track

} UITableViewCellAccessoryType

//是否加换行线

typedef enum {

   UITableViewCellSeparatorStyleNone,

   UITableViewCellSeparatorStyleSingleLine

} UITableViewCellSeparatorStyle//改变换行线颜色

tableView.separatorColor = [UIColor blueColor];

原创粉丝点击