UITableview的用法上

2016-09-08  本文已影响0人  MR_CZWang

/*

简化版

uitableview  显示数据方法

1.设置数据源对象。2 让数据源对象遵守数据源方法UItabelviewDatasouce。3:在数据源对象中必须实现UItabelviewDatasouce某些特定的方法,这些方法的意思就是告诉tableview如何显示数据。4:当tabelview 运行起来的时候,数据源方法不断地告诉tabelview显示什么数据

*/

//设置数据源对象

self.tv.dataSource=self;

//在数据源对象中一般实现的方法

}

//1.告诉UItableview显示几组

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

//默认是一组,所以展示的就是一组数据

return 1;

}

//2.告诉tableView每一组显示几行数据

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

//如果有多组的话并且每组里的行数也不相同可以

//都是为了演示一下

//    if(section==0){

//        return 3;

//    }else if(section==1){

//        return 2;

//    }else if(section==2){

//        return 1;

//    }

return 2;

}

//3.告诉tableView的每一组的每一行显示什么内容的单元格

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

//这里面基本上都是1.获取模型数据2.创建单元格uitableviewcell3.把模型中的数据设置给单元格中的子控件 4.返回单元格uitableviewcell

//如果有多组的话进行判断

//    if(indexPath.section==0){

//

//    }else if (indexPath.section==1){

//

//    }else if (indexPath.section==2){

//

//

//    }

//传建一个单元格对象并且返回

UITableViewCell *cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

//为单元格设置数据

cell.textLabel.text=@"大家好";

//cell.imageView给cell设置图片框

//表示当前是第几组

//indexPath.section;

//表示当前是第几行

//indexPath.row;

return cell;

}

//每一组的组标题显示什么

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

//根据当前组的索引返回当前的组标题

//这都是为了演示

if(section==0){

return @"亚洲";

}else if (section==1){

return @"非洲";

}else{

return 0;

}

}

//每一组的组尾巴显示什么

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

//这都是为了演示

return 0;

}

-(instancetype)initWithDict:(NSDictionary *)dict{

if(self=[super init]){

[self setValuesForKeysWithDictionary:dict];

}

return self;

}

-(NSMutableArray *)groop{

if(_groop==nil){

//懒加载数据

//找到plist文件路径

NSString *path=[[NSBundle mainBundle]pathForResource:@"" ofType:@""];

//加载 plist文件

NSArray *arr=[NSArray arrayWithContentsOfFile:path];

//吧字典转换成模型

NSMutableArray *arr_model=[NSMutableArray array];

//遍历字典中每个字典,把每个地点转换成模型,吧模型放到arr_model中

for (NSDictionary *dict in arr_model) {

//Model *model=[[Model alloc]initWithDict:dict];

}

//[arr_model addObject:model];

}

return _groop;

//设置单元格右侧有个按钮样式的东西(默认系统的哪几种样式)

cell.accessoryType=UITableViewCellAccessoryCheckmark;

//设置单元格右侧有个按钮样式的东西(自定义样式)

cell.accessoryView=[[UISwitch alloc]init];

表用于显示数据列表,数据列表中的每一项都由行表示。IOS没有行的限制,行数仅受可用才存储空间的限制,IOS的表只有一列。

表视图是显示表数据的试图对象,是UITableView类的一个实例,表中的每个可建行都有UITableViewCell类实现。即一个UITableView实例由若干UITableViewCell组成。

表视图不负责存储表中的所有数据,只存储足够绘制当前可见行的数据。每次只加载一屏幕的数据。表视图从遵循UITableViewDelegate协议的对象中获取配置数据,从遵循UITableViewDataSource协议的对象中获得行数据。

1.  首先,Controller需要实现两个  delegate ,分别是  UITableViewDelegate 和  UITableViewDataSource

2.然后 UITableView对象的 delegate要设置为 self。

3. 然后就可以实现这些delegate的一些方法。

(1)- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

这个方法返回 tableview 有多少个section

//返回有多少个Sections

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return array.Count;  //默认值为1

}

(2)- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section;

这个方法返回对应的section有多少个元素,也就是多少行。

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

{

return 10;  //默认也是1 ,分区中的行的个数

}

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

返回指定的row 的cell。这个地方是比较关键的地方,一般在这个地方来定制各种个性化的 cell元素。这里只是使用最简单最基本的cell 类型。

其中有一个主标题cell.textLabel 还有一个副标题cell.detailTextLabel,  还有一个 image在最叫cell.imageView.  还可以设置右边的图标,通过cell.accessoryType 可以设置是饱满的向右的蓝色箭头,还是单薄的向右箭头,还是勾勾标记。

//设置每行调用的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=@”测试文本”;

//设置单元格右侧有个按钮样式的东西

cell.accessoryType=UITableViewCellAccessoryCheckmark;

//设置单元格右侧有个按钮样式的东西(自定义样式)

cell.accessoryView=[[UISwitch alloc]init];

return cell;

}

表中的每一行都代表一个UITableViewCell。可以使用图像、文本还有辅助的图标等来自定义你自己的UITableViewCell。你可以自定义你自己的cell如下模型或者像appstore那样的。

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

这个方法返回指定的 row 的高度。

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;

这个方法返回指定的 section的header view 的高度。

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

这个方法返回指定的 section的footer view 的高度。

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

返回指定的section的 header的title,如果这个sectionheader  有返回view,那么title就不起作用了。

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

{

if (tableView == tableView_)

{

if (section == 0)

{

return @"Girls";

}

else

{

return @"Boys";

}

}

}

(5)设置让UITableView行缩进

// 把每一行的缩进级别设置为其行号,第一行为1,第二行为2

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

NSUInteger row = [indexPath row];

return row;

}

(6)设置cell每行间隔的高度

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

return 40;

}

(7)设置选中Cell的响应事件

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

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

}

该方法是选中之后执行。另一个方法willSelectRowAtIndexPath是在一行选择前调用,通常用来阻止某行的能否被选中

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

{

if(row == 0)

return nil;//设置第一个可见行不能被选中

return indexPath;

}

图片说明:此图片是从其他网站上戒掉的部分图。和上述代码运行效果不大相同。

上一篇下一篇

猜你喜欢

热点阅读