zoukankan      html  css  js  c++  java
  • 一、UITableView的属性

    一、UITableView的属性

     

    NSIndexPath类型是用来获取用户选择的indexPath,在别的函数里面,若需要知道用户选择了哪个cell,用上它可以省事很多。不必再去建全局变量section和row。

     

    NSIndexPath *tableSelection = [self.tableView indexPathForSelectedRow];

     

    1.    UITableView的初始化

     

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

    [tableview setDelegate:self];

    [tableview setDataSource:self];

    [self.view addSubview: tableview];

    [tableview release];

     

     

    (1) 在初始化UITableView的时候必须实现UITableView的是,在.h文件中要继承UITableViewDelegate和 UITableViewDataSource,并实现3个UITableView数据源方法和设置它的delegate为self,这个是在不直接继承 UITableViewController实现的方法。

    (2) 直接在XCODE生成项目的时候继承UITableViewController的,它会帮你自动写好UITableView必须要实现的方法。

    (3)UITableView继承自UIScrollView。

    2.    UITableView的数据源

    (1)UITableView是依赖外部资源为新表格单元填上内容的,我们称为数据源,这个数据源可以根据索引路径提供表格单元格,在UITableView中,索引路径是NSIndexPath的对象,可以选择分段或者分行,即是我们编码中的section和row。

    (2)UITableView有三个必须实现的核心方法,分别如下:

     

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

    这个方法可以分段显示或者单个列表显示我们的数据。

     

    -(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section;

    这个方法返回每个分段的行数,不同分段返回不同的行数可以用switch来做,如果是单个列表就直接返回单个你想要的函数即可。

     

    -(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath;

    这个方法是返回我们调用的每一个单元格。通过我们索引的路径的section和row来确定。

     

    3.    UITableView的委托方法

    使用委托是为了响应用户的交互动作,比如下拉更新数据和选择某一行单元格,在UITableView中有很大这种方法供我们选择。

    (1) 委托方法讲解

    //添加索引

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

        return TitleData;

    }

    //设置每个section显示的Title

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

        return @"Andy-清风";

    }

     

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

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

        return 2;

    }

     

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

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

    }

     

    //设置每行调用的cell

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

        static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";

        

        UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:

                                 SimpleTableIdentifier];

        if (cell == nil) {

            cell = [[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefault

                                          reuseIdentifier:SimpleTableIdentifier] autorelease];

        }

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

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

        cell.text=@”Andy-清风”;

        return cell;

    }

    //设置让UITableView行缩进

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

        NSUInteger row = [indexPath row];

        return row;

    }

    //设置cell每行间隔的高度

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

        return 40;

    }

    //返回当前所选cell

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

    [TopicsTable selectRowAtIndexPath:ip animated:YESscrollPosition:UITableViewScrollPositionNone];

     

    //设置UITableView的style

    [tableView setSeparatorStyle:UITableViewCellSelectionStyleNone];

    //设置选中Cell的响应事件

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

        

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

    }

     

    //设置选中的行所执行的动作

     

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

    {

        NSUInteger row = [indexPath row];

        return indexPath;

    }

    //设置划动cell是否出现del按钮,可供删除数据里进行处理

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

    }

    //设置删除时编辑状态

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

    forRowAtIndexPath:(NSIndexPath *)indexPath

    {

        }

        

        //右侧添加一个索引表

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

        }

        

        

        (2)  其他

        

        //选中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]; 

        

     

     

    二、UITableView的代理方法

    #pragma mark 每一行的高度

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

     

    #pragma mark 选中了某一行就会调用

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

     

    #pragma mark 取消选中了某一行就会调用

    - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

     

    #pragma mark 当用户提交了一个编辑操作就会调用(比如点击了“删除”按钮)

    // 只要实现了这个方法,就会默认添加滑动删除功能

    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

     

    #pragma mark 当移动了某一行cell就会调用

    // 只要实现了这个方法,就会默认添加排序功能

    - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath

     

    二、修改Cell的状态

    1.最好通过“修改模型数据”来修改Cell的状态

     

    2.修改步骤

    1> 修改模型数据

    2> 刷新表格

    * 整体刷新:reloadData(最重要)

    * 局部刷新:reloadRowsAtIndexPaths:withRowAnimation:

     

    三、UITableView常见方法

    1.取消选中某一行(去掉cell选中时默认的蓝色背景)

    - (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;

     

    2.局部刷新(仅仅刷新indexPaths数组中装着的行)

    - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

     

    3.整体刷新(屏幕中的每一行都刷新)

    - (void)reloadData;

     

    4.直接删除界面上的行数(要求模型数据也要删掉对应的数量)

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

     

    5.设置编辑模式

    @property(nonatomic,getter=isEditing) BOOL editing; 

    - (void)setEditing:(BOOL)editing animated:(BOOL)animated;

     

    // 注意:

    不管是局部刷新,还是整体刷新,原理都是:

    UITableView重新向数据源(dataSource)和代理(delegate)发送相应的消息,最终将得到的数据展示出来

     

  • 相关阅读:
    JavaScript 的历史
    阿里面试题:
    DBA_Oracle基本体系架构(概念)
    java内存管理机制
    HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash
    HashMap实现原理分析
    堆栈
    数据结构:HDU 2993 MAX Average Problem
    数学(欧拉函数):UVAOJ 11426 GCD
    搜索(DLX):HOJ 1017
  • 原文地址:https://www.cnblogs.com/iOS-mt/p/4156922.html
Copyright © 2011-2022 走看看