确定单元格的位置:首先要知道分区号,在知道行号。
UITableView:API文档的总结:
1、UITableView的父类是:UIScrollview,所以他是能滚动的,但是只能在竖直方向滚动。
2、UITableView是iOS中提供的用来以列表的形式展示数据的方法,但是只有一列。
3、UITableView可以由多个分组构成(section),每个分组下可以由很多行(row),分组和行的下标都是从0开始的(例如:section班级分组;row同学所在的排数)
4、UITableView可以有两种样式(Plain)和(Grouped)样式,一旦给tableview指定了样式之后就不能修改了。
5、UITableView很多方法都和NSIndexPath有关,NSIndexPath中存储的是当前你要使用的单元格(cell)所在分区的下标和所在分区中行的下标

创建UITableView对象,并且对UITableView对象配置属性
/    1、创建控件对象
    UITableView *tableView = [[UITableView alloc]initWithFrame:[UIScreen mainScreen].bounds style:(UITableViewStylePlain)];
//    2、配置属性
//    2.1、配置单元格(cell)的行高
    tableView.rowHeight = 100;
//    2.2、配置单元格分割线的颜色
    tableView.separatorColor = [UIColor clearColor];
//    2.3、配置单元格分割线的样式
    tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
//    2.4、配置tableView的表头,表头很重要,经常用来做轮播图。
//     2.4.1、准备一个表头视图
    UIView *headerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, 50)];
    headerView.backgroundColor = [UIColor greenColor];
//     2.4.2、将准备好的表头视图赋值给tableView的表头视图属性
    tableView.tableHeaderView = headerView;
    [headerView release];
//    2.5、配置tableView的表尾
    UIView *footView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, 50)];
    footView.backgroundColor = [UIColor redColor];
    tableView.tableFooterView = footView;
    [footView release];
//        快速去除多余的(没有使用的)单元格
tableView.tableFooterView = [[[UIView alloc]init]autorelease];
//    2.6、配置数据源代理
    tableView.dataSource = self;
//    2.7、配置业务代理
    tableView.delegate = self;

创建单元格,并为单元格配置数据所调用的方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
cell(单元格):
  UITableViewCell:单元格视图,继承自UIView。用来展示数据 
   cell上有两个视图,一个是contentView,一个是accessoryView(辅助视图),而我们用到的cell的属性textLable,detailTextLabel,imageView这些视图都是在contentView上,所以当我们自定义cell的时候,一定要把自定义的控件放到contentView上;
给cell添加属性:
1.给cell的imageView属性赋值
    cell.imageView.image = [UIImage imageNamed:@"2"];
//    2.给cell的textLable附上文本内容。
    cell.textLabel.text = [NSString stringWithFormat:@"%ld--%ld",indexPath.section, indexPath.row];
//    3.给cell的detailTextLable附上文本内容
    cell.detailTextLabel.text = @"中岛美嘉";
//    4、设置cell右边界的辅助视图
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
//    cell.accessoryView = [[[UISwitch alloc]init]autorelease];
//        自定义辅助视图
    UIView *accessoryView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 40, cell.frame.size.height)];
    accessoryView.backgroundColor = [UIColor redColor];
    cell.accessoryView = accessoryView;
    [accessoryView release];
cell(单元格)的重用:
cell的重用是为了避免反复的消耗系统资源,还能达到节省内存的作用
//    cell重用的步骤:
//    1、创建一重用标识(重用ID),这个标识在cell创建的时候使用,也在重用池中取cell是判断使用;reuseIdentifier(重用标识 )
//    使用static修饰,重用标识的字符串变量,只被初始化一次,提高一下重用的效率。
   static NSString *identfier = @"cell";
//    2、当需要一个单元格时(cell),先去重用池中,根据重用ID去查找有没有可以使用的单元格。
//    如果有:直接从重用池中拿来使用(修改这个单元格上的数据)。
//    如果没有:此时只能直接新建一个新的单元格。
//    tableView:就是当前代理的委托人
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identfier];
//    3、判断是否成功取到可重用的cell
    if (cell == nil) {
        NSLog(@"==========");
        cell = [[[UITableViewCell alloc]initWithStyle:(UITableViewCellStyleValue1) reuseIdentifier:identfier]autorelease];
    }

从数组中读取数据,并且显示在tableview上。
     需要在实现业务代理的方法中添加页眉、页脚和右边框的索引
第一步:定义一个大的数组用来存放其他的小的数组
 NSArray *lArr = @[@"李萌",@"李武华",@"李白",@"李玉怀"];
 NSArray *zArr = @[@"张波",@"张长永",@"张三",@"张子乾"];
 NSArray *wArr = @[@"王向凯",@"王维",@"王忠伟"];
self.bigArray = @[lArr,zArr,wArr];(此时的大的数组是全局变量)
第二步:让视图tableview遵循数据源代理,并且通过数据源代理方法能够实现
          1、 配置tableview的分区个数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
  // 根据数组元素的个数,确定分区的个数
    return self.bigArray.count;
}    2、 返回每个分区对应的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
//    根据分区的下标找出大数组中小数组中的元素个数
    return [self.bigArray[section] count];
}
第三步:在创建单元格,并且能够为单元格配置属性的方法中实现
#pragma mark 从数组中取出数据展示:
////    1、取出大数组中的元素
    NSArray *nameArray = self.bigArray[indexPath.section];
////    2、从nameArray中取出名字
    NSString *name = nameArray[indexPath.row];
////    3、将我们取出的值赋值给
    cell.textLabel.text = name;
    cell.imageView.image = [UIImage imageNamed:@"2"];

从字典中读取数据,并且显示在tableview上面,
      需要在实现业务代理的方法中添加页眉、页脚和右边框的索引
第一步:创建一个字典存放数组:此时的字典也是全局变量。同时定义一个数组(orderKey)用来存放字典中的所有key值
    NSArray *lArr = @[@"李萌",@"李武华",@"李白",@"李玉怀"];
  NSArray *zArr = @[@"张波",@"张长永",@"张三",@"张子乾"];
  NSArray *wArr = @[@"王向凯",@"王维",@"王忠伟"];
   self.dictionary = @{@"L":lArr,@"Z":zArr,@"W":wArr};

第二步:取出字典中的key值
   NSArray *keys= self.dictionary.allKeys;
第三步:将排好序的key值数组赋值到数组orderKey中
   self.orderKey = [keys sortedArrayUsingSelector:@selector(compare:)];
第四步:让视图tableview遵循数据源代理,可以得到:
    1、配置tableview的分区个数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
//    根据字典中键值对个数,确定分区的个数
     return self.orderKey.count;
//    return self.dictionary.count;
}
    2、 返回每个分区对应的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
//    1.根据分区的下标取出self.orderKey数组中存放的key值
    NSString *key = self.orderKey[section];
//    2.使用key值取出字典中的value值(数组)并取出数组中的元素个数
//    [self.dictionary objectForKey:key]
    return  [self.dictionary[key] count];
}
第五步:在创建单元格,并且能够为单元格配置属性的方法中实现
#pragma mark 从字典中取数据显示
//    1.根据分区下标取出self.orderKey中的元素(key值);
    NSString *key = self.orderKey[indexPath.section];
//    2.取出key值在字典中对应的数组
    NSArray *name = self.dictionary[key];
//    3.根据行下标取出数组中的名字并复制给textLabel.text;
    cell.textLabel.text = name[indexPath.row];
    cell.imageView.image = [UIImage imageNamed:@"2"];
第六步:配置分区的右侧的分区索引,区头的顺序和数组中的元素的顺序一致
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
//根据排好序的数组设置右侧分区索引
    return self.orderKey;
}
配置每个分区的页眉:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
//    if (0 == section) {
//        return @"L";
//    }else if (1 == section){
//    return @"Z";
//    }else{
//   
//    return @"W";
//    }
//    根据排好序的数组返回区头
    return self.orderKey[section];
}
配置分区的右侧的分区索引,区头的顺序和数组中的元素的顺序一致
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
//根据排好序的数组设置右侧分区索引
    return self.orderKey;
}
配置每个分区的页脚(区尾)title
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section{
    return @[@"f",@"s",@"l"][section];
}
    tableView的业务代理方法,并且实现页面的跳转。并且通过属性进行传值。
#pragma mark tableView的业务代理方法
//返回cell的行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    if (0 != indexPath.row % 2) {
        return 80.0;
    }else{
        return 160.0;}
}

//触发时机:点击cell的时候会触发的方法,所以要完成点击cell跳转到其他界面,就把方法的实现写在这个方法里面。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//    NSLog(@"%ld--%ld",indexPath.section,indexPath.row);
    DetailViewController *detailVC = [[DetailViewController alloc]init];
  
    detailVC.textString = [NSString stringWithFormat:@"%ld--%ld",indexPath.section,indexPath.row];
  
    [self.navigationController pushViewController:detailVC animated:YES];
    [detailVC release];
  
}
//触发时机:点击一个cell之后,再点击其他的cell时触发,
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0){

NSLog(@"%ld--%ld",indexPath.section,indexPath.row);

}

UITableView 的使用总结的更多相关文章

  1. iOS UITableView 与 UITableViewController

    很多应用都会在界面中使用某种列表控件:用户可以选中.删除或重新排列列表中的项目.这些控件其实都是UITableView 对象,可以用来显示一组对象,例如,用户地址薄中的一组人名.项目地址. UITab ...

  2. UITableView(二)

    #import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...

  3. iOS: 在UIViewController 中添加Static UITableView

    如果你直接在 UIViewController 中加入一个 UITableView 并将其 Content 属性设置为 Static Cells,此时 Xcode 会报错: Static table ...

  4. iOS 编辑UITableView(根据iOS编程编写)

    上个项目我们完成了 JXHomepwner 简单的应用展示,项目地址.本节我们需要在上节项目基础上,增加一些响应用户操作.包括添加,删除和移动表格. 编辑模式 UITableView 有一个名为  e ...

  5. 使用Autolayout实现UITableView的Cell动态布局和高度动态改变

    本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 1 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并 ...

  6. iOS - UITableView中Cell重用机制导致Cell内容出错的解决办法

    "UITableView" iOS开发中重量级的控件之一;在日常开发中我们大多数会选择自定Cell来满足自己开发中的需求, 但是有些时候Cell也是可以不自定义的(比如某一个简单的 ...

  7. UITableView cell复用出错问题 页面滑动卡顿问题 & 各杂七杂八问题

    UITableView 的cell 复用机制节省了内存,但是有时对于多变的自定义cell,重用时会出现界面出错(例如复用出错,出现cell混乱重影).滑动卡顿等问题,这里只简单敲下几点复用出错时的解决 ...

  8. UITableview delegate dataSource调用探究

    UITableview是大家常用的UIKit组件之一,使用中我们最常遇到的就是对delegate和dataSource这两个委托的使用.我们大多数人可能知道当reloadData这个方法被调用时,de ...

  9. UITableView点击每个Cell,Cell的子内容的收放

    关于点击TableviewCell的子内容收放问题,拿到它的第一个思路就是, 方法一: 运用UITableview本身的代理来处理相应的展开收起: 1.代理:- (void)tableView:(UI ...

  10. 使用UITableView的分组样式

    分组样式顾名思义是对TableView中的数据行进行分组处理,每个分组都有一个header和footer. TableView中header的英文文本是大写的,footer的英文文本是小写的.如下图浅 ...

随机推荐

  1. 【Java】String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  2. 关于判断变量是否为null的顺序问题。

    if("y".equals(other)){ } 其中,other字符串变量可能为Null,可以加一个null判断或者将常量写在前面,变量写在equals后面.如果将变量other ...

  3. MySQL基本查询语句练习

    努力很久只为获得别人尊重的眼光. ——我是,董宏宇,我为自己代言. 技术交流QQ:1358506549(请注明你的来意) use xsx; CREATE TABLE Course( Cno char( ...

  4. NOI题库192 生日蛋糕

    192:生日蛋糕 总时间限制: 5000ms 内存限制: 65536kB 描述 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i ...

  5. JavaScript中的加号

    JavaScript中的加号“+”可以作为数学运算符的加,也可以作为字符串拼接,也可以作为一元运算符,表示正数. 1+2 "2"+"3" 3+"2&q ...

  6. varnish esi出现no esi processing, first char not ‘<’的错误处理方式

    大致意思是varnish的ESI使用mod_deflate来处理可以接受含有请求头Accept-Encoding的请求,这样转发到后端服务器后,后端服务器返回的响应内容就不是一个格式良好的XML或ht ...

  7. hdu 1106 排序

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  8. oracle参数优化

    关闭OEM,使用oracle用户登录,执行命令: emctl status dbconsole emctl stop dbconsole 以下命令推荐用sys用户登录PLSQL Developer,使 ...

  9. python面向对象【进阶篇】

    静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量 ...

  10. curl 模拟ajax 请求

    主要是在header请求里加一个  X-Requested-With: XMLHttpRequest curl -v -H "X-Requested-With: XMLHttpRequest ...