UITableView 初探

原创 2015年11月21日 10:43:08

初始化

// 一般给屏幕大小的frame
 UITableView *tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStylePlain];

属性

// 设置代理和数据源(tableView的很多设置和方法都需要在这两个协议中实现)
    tableView.delegate = self;
    tableView.dataSource = self;
// 设置整个tableView的表头
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    headerView.backgroundColor = [UIColor greenColor];
    tableView.tableHeaderView = headerView;
    [headerView release];
// 设置整个tableView的表尾
    UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
    footerView.backgroundColor = [UIColor brownColor];
    tableView.tableFooterView = footerView;
    [footerView release];

协议方法

#pragma mark -- dataSource 必须实现的2个方法

// 返回 每一个分区各自的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 5;
}

// 返回 索引处(哪一个分区的哪一行) 的每一个 cell(单元格)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    /*
     UITableViewCell重用
     需要一个重用的集合 作用:把滑出屏幕的cell(完全消失在屏幕上时) 放入这个重用集合(备用)
     当屏幕下方需要新的cell进行展示的时候开始重用
     方式是 首先 系统会先去 重用集合 中找 看有没有cell 可以重新使用 如果有 就直接使用 如果没有 就创建一个出来进行使用
     */

    // 标识符
    // 可以区分每一种cell的样式
    static NSString *identifier = @"MyCell"; // 防止多次创建释放的过程

    // 去重用集合中 按标识符 寻找对应的cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
        // 去创建新的cell
        // 释放cell的时候 只有创建出来的才需要去释放 从集合中取出来 不用释放
        cell = [[[UITableViewCell alloc] initWithStyle:
                 UITableViewCellStyleSubtitle reuseIdentifier:identifier] autorelease];
        static int number = 0;
        number++;
        NSLog(@"%d",number);

    }
    // 设置单元格上的标题
    cell.textLabel.text = @"哈哈";
    cell.detailTextLabel.text = @"呵呵";
    // 设置单元格上的图片
    cell.imageView.image = [UIImage imageNamed:@"4.jpg"];
    // 设置辅助按钮
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    return cell;
}
// 设置每个分区的表头和表尾
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *headView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
    headView.backgroundColor = [UIColor grayColor];
    return [headView autorelease];
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *footView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
    footView.backgroundColor = [UIColor purpleColor];
    return [footView autorelease];
}

// 设置分区表头 和 表尾 的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 20;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 20;
}


// 设置每个分区的每一行 的 高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 80;
}

// 设置分区表头 的 标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    switch (section) {
        case 0:
            return @"A";
            break;
        case 1:
            return @"B";
            break;
        case 2:
            return @"C";
            break;
        default:
            return @"#";
            break;
    }

}

// 设置tableView右边 标题小按钮
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    NSArray *sectionIndexTitles = @[@"A",@"B",@"C"];
    return sectionIndexTitles;
}

tableView和数据

- (void)viewDidLoad {
    [super viewDidLoad];

    [self setUpData];
    [self addTableView];
}

// 数据的处理
- (void)setUpData
{
    // 拿到路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"TableViewPlist" ofType:@"plist"];

    NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:path];

// 把Value中的字典 转化为数据模型
// 创建装完model的字典
    self.dataDic = [NSMutableDictionary dictionary];

// 遍历字典
// 取出所用key
    NSArray *keys = [dic allKeys];
        for (int i = 0; i < keys.count; i++) {
        // 取出每一个key
        // 用每一个key取出 对应的Value
        NSString *key = keys[i];
        NSArray *value = dic[key];
        // 创建临时数组 保存每一个赋值完成的model
        NSMutableArray * tempArray = [NSMutableArray array];
        // 遍历每一个value
        for (NSDictionary *oneDic in value) {
            // 给model赋值
            // 创建model
            CellModel *model = [[CellModel alloc] init];
            // 给我一个字典 还你一个赋值完成的model
            [model setValuesForKeysWithDictionary:oneDic];
            // 把model装进临时数组中
            [tempArray addObject:model];
            // 释放
            [model release];
        }
        // 重新构建 字典的 键值对
        [self.dataDic setObject:tempArray forKey:key];
    }

}

- (void)addTableView
{
    UITableView *tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStyleGrouped];
    tableView.delegate = self;
    tableView.dataSource = self;
    [self.view addSubview:tableView];
    [tableView release];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identifier = @"MyCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:
                 UITableViewCellStyleSubtitle reuseIdentifier:identifier] autorelease];

    }
    // 赋值位置
    NSArray *keys = self.dataDic.allKeys;
    NSString *key = keys[indexPath.section];
    NSArray *values = self.dataDic[key];
    CellModel *model = values[indexPath.row];

    // 赋值cell
    cell.textLabel.text = model.title;
    cell.imageView.image = [UIImage imageNamed:model.imageName];


    return cell;
}

// 点击跳转的方法
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"sdf");
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSArray *keys = self.dataDic.allKeys;
    NSString *key = keys[section];
    NSArray *value = self.dataDic[key];

    return [value count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 3;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

xamarin学习笔记B07(ios的UITableView)

  • 2017年12月16日 15:23
  • 378.3MB
  • 下载

UITableView

  • 2017年05月19日 15:51
  • 239KB
  • 下载

UITableView的折叠收缩和QQ好友分组效果

可折叠展开的tableView,QQ好友分组列表 demo下载地址https://github.com/zhengwenming/ExpandTableView   原理分析:这个可以折...
  • IT_ZGC
  • IT_ZGC
  • 2016年08月12日 16:06
  • 238

IOS UITableView及索引条源码

  • 2017年09月14日 15:34
  • 2.25MB
  • 下载

UITableView单选

  • 2015年08月25日 09:02
  • 61KB
  • 下载

swift里UITableView简单的用法

swift里UITableView简单的用法 删除、移动等等

UITableView教材

  • 2012年04月19日 12:43
  • 928KB
  • 下载

uitableview

  • 2013年04月01日 14:11
  • 67KB
  • 下载

iOS开发之高级视图—— UITableView(六)表视图刷新

UITableView常用场景之一是,需要连通网络,查询服务器的数据,对列表数据进行更新。本例子通过本地数组的刷新模拟了一下该场景。      // // ViewController.m // ...

UITableView的封装

  • 2015年04月20日 20:00
  • 50KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UITableView 初探
举报原因:
原因补充:

(最多只允许输入30个字)