关闭

UI 第九天 UITableView

标签: TableViewcell
177人阅读 评论(0) 收藏 举报

表视图UITableView,iOS中最重要的刷图
表视图通常用来管理一组具有相同数据结构的数据
UITableView继承自UIScrollView,所以它也是可以滚动的
表视图可以分区显示数据,每个分区称为一个section,每一行称为row,编号都是从0开始的
初始化:
UITableView *tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:(UITableViewStylePlain)
后面的style一共2种,另一种是group,每个分区有一定的间隙,Plain则没有
UITableView需要遵守两个代理协议,一个是UITableViewDelegate,另一个是UITableViewDataSource
所以需要设置这两个的代理人

设置整个tableView的表头和表尾 表头表尾设置的view只有高度会对其有所影响,因为他的起始点是默认的,width也是默认整个屏幕的宽
表头的属性: tableView.tableHeaderView
表尾的属性: tableView.tableFooterView

上面提到了遵守UITableViewDataSource协议,这个协议有两个必须要实现的方法:
第一个是返回每个分区的行数 返回值是NSInteger
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
第二是返回索引处(分别为哪一个分区的哪一行)的每一个cell,返回值是 UITableViewCell
- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
其中UITableViewCell有两个属性UIlabel,UIImageView 是为了添加文字与图片的
设置cell标题 cell.textLabel.text = @“”;
cell.detailTextLabel.text = @“”;

重用机制(UITableViewCell重用):
需要一个重用的集合 作用: 把滑出屏幕的cell(完全消失在屏幕时)放入这个重用集合(备用)
当屏幕下方需要新的cell进行展示的时候 开始备用
方式是: 首先系统会先去重用集合中找 看有没有cell可以重新使用 如果有就直接使用 如果没有就创建一个新的cell出来进行使用
如果只有一个分区的话,一般系统共初始化屏幕上的cell的个数+1

static NSString *identifier = @"MyCell";

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

设置辅助按钮, cell.accessoryType = UITableViewCellAccessoryCheckmark;

其他方法:
设置分区表头表尾标题 返回值是NSString
设置分区表头表尾高度 返回值是CGFloat
设置tableView右边标题小按钮 返回值是数组,将数组中的值作为右边的小按钮
设置分区行的高度, 返回值是CGFloat

获取文件内容时
UITableView与model结合起来使用
1. 拿到文件的路径
从目录中获取
NSString *path = [[NSBundle mainBundle] pathForResource:@”TableViewPlist” ofType:@”plist”]; 一个是文件名,一个后缀(没有.)
创建一个字典,接收文件中的内容
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:path];
2.新建一个cellModel, 字典中有几个键值对 就要创建几个属性
注意:属性的名字 就是键值对中的key 要完全一致
3.把value中的字典 转化为数据模型
创建装完model的字典
self.dataDic = [NSMutableDictionary dictionary];

// 遍历字典
NSArray *keys = dic.allKeys;

for (int i = 0; i < keys.count; i++) {

    // 取出每一个key
    NSString *key = keys[i];

    // 用每一个key取出 对应的value
    NSArray *value = dic[key];

    // 创建临时数组  保存每一个赋值完成的model
    NSMutableArray *tempArray = [NSMutableArray array];

    // 遍历每一个value
    for (NSDictionary *oneDic in value) {

        // 给model赋值了
        // 创建model
        CellModel *model = [[CellModel alloc]init];

        // KVC

        // 你给我一个字典 我还你一个赋值完成的model
        [model setValuesForKeysWithDictionary:oneDic];

        // 把model装进临时数组中
        [tempArray addObject:model];

        // 释放
        [model release];
    }


    // 重新构建字典的键值对
    [ self.dataDic setObject:tempArray forKey:key];

}
重点: 这样文件里面的东西就转换成一个字典,key是字符串,value是数组,数组里面是mode, 底下在给cell添加标题等 就可以在通过model里面的属性就行赋值

点击cell跳转的方法:
- (void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6398次
    • 积分:441
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:10篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论