关闭

我的iOS学习历程 - UITableView(数据model的使用)

161人阅读 评论(0) 收藏 举报
分类:

今天学习的是UITableView :

首先将创建tableView的过程封装在一个方法里,让代码更好观察和修改:
最后会写一个类似于支付宝的页面,源代码点此下载

1.自定义初始化(这里的tableView有几种格式,一般使用plain和Grouped,前一个是普通的,后一个是分组的)

//  创建表视图
- (void)addTableView {
    UITableView *tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:(UITableViewStyleGrouped)];
    //  设置代理和数据源
    tableView.delegate = self;
    tableView.dataSource = self;
    //  显示视图
    [self.view addSubview:tableView];
    [tableView release];
}

这里要注意的是必须要设置数据源的代理和代理,因为必须实现数据源和代理的方法才能显示出tableView

2.设置表头和表尾

//  设置整个tableView的表头和表尾
    //  只有高度能影响
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(100, 10, 50, 100)];
    headerView.backgroundColor = [UIColor cyanColor];
    tableView.tableHeaderView = headerView;
    [headerView release];
    //  设置表头表尾的view
    UIView *footView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    footView.backgroundColor = [UIColor blueColor];
    tableView.tableFooterView = footView;
    [footView release];

数据源协议必须实现的方法

3.返回分区数

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 3;
}

4.返回每个分区有多少行

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

    return 5;
}

5.返回索引处(分别哪一个分区的哪一个行)的每一个cell(单元格)

有多少个cell就执行多少次(设置cell的内容)

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

   static NSString *indentifier = @"MyCell"; //  加static防止多次创建释放的过程
    //  去重用集合中按标识符寻找对应的cell
    UITableViewCell *cell = [tableView dequeueReusableHeaderFooterViewWithIdentifier:indentifier];
    if (cell == nil) {
        //  去创建新的cell
        //  释放cell的时候,只有创建出来的才需要去释放 从集合里取出来的不用去释放
        cell = [[[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:indentifier]autorelease];

    }
    //  赋值cell上的控件(从集合中取出来的也需要赋值) 
    //  设置cell上的标题
    cell.textLabel.text = @"xixi";
    cell.detailTextLabel.text = @"aa";
    //  设置cell上的图片
    cell.imageView.image = [UIImage imageNamed:@"1"];
    //  设置辅助按钮
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    return [cell autorelease];
}
要注意的是:cell的创建方法是需要一个重复集合,每当一个cell消失在手机屏幕上时,就会被放入重复集合,而当每个cell创建的时候都会先去寻找一下重复集合有没有cell,有的话直接拿出来重复利用

6.设置每个分区的表头 和 表尾

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 50)];
    headerView.backgroundColor = [UIColor redColor];
    [headerView autorelease];
    return headerView;
}

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

7.设置分区表头 和 表尾的高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 50;
}

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

8.设置每个分区中每行的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 50;
}

9.设置分区表头 标题

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

    if (section == 0) {
        return @"a";
    }else if (section == 1) {
        return @"b";
    }else {
        return @"c";
    }
}

10.设置tableView右边 标题小按钮

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    return @[@"a",@"b",@"c"];
}

下面是一个利用tableView和数据model的合作来写出类似于支付宝的一个页面:这里写图片描述
具体源代码在标题上下载.

0
0

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