美文网首页
UITableview的用法上

UITableview的用法上

作者: MR_CZWang | 来源:发表于2016-09-08 16:35 被阅读0次

    /*

    简化版

    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;

    }

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

    相关文章

      网友评论

          本文标题:UITableview的用法上

          本文链接:https://www.haomeiwen.com/subject/wtbdettx.html