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)发送相应的消息,最终将得到的数据展示出来

     

  • 相关阅读:
    ubuntu安装jdk的两种方法
    LeetCode 606. Construct String from Binary Tree (建立一个二叉树的string)
    LeetCode 617. Merge Two Binary Tree (合并两个二叉树)
    LeetCode 476. Number Complement (数的补数)
    LeetCode 575. Distribute Candies (发糖果)
    LeetCode 461. Hamming Distance (汉明距离)
    LeetCode 405. Convert a Number to Hexadecimal (把一个数转化为16进制)
    LeetCode 594. Longest Harmonious Subsequence (最长的协调子序列)
    LeetCode 371. Sum of Two Integers (两数之和)
    LeetCode 342. Power of Four (4的次方)
  • 原文地址:https://www.cnblogs.com/iOS-mt/p/4156922.html
Copyright © 2011-2022 走看看