码迷,mamicode.com
首页 > 其他好文 > 详细

UI开发----UITableView表视图-1

时间:2015-04-23 00:07:11      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:uitableview   uitableviewcell   ui   

 //  Created By 郭仔   2015年04月22日22:12:47

// ==================================

时间都去哪了!!!!!!!

// ==================================

表视图 UITableView,iOS中最重要的视图,随处可?见。 表视图通常?用来管理?一组具有相同数据结构的数据。

UITableView继承?自UIScrollView,所以可以滚动
表视图的每?一条数据都是显?示在UITableViewCell对象中
表视图可以分区显?示数据,每个分区称为?一个section,每?一?行称为 row,编号都是从0开始。

DataSource数据源:

我们需要给tableView指定?一个数据源,它负责给tableView提供数据 需要实现协议中两个必须实现的?方法;

// ============

UITableView中每?一个单元格,被称为?一个cell
(UITableViewCell)。 系统预置了4种(枚举)样式的cell。 不同样式的cell包含的控件有细微差别。

// ============

UITableView的重用机制:

UITableView靠mutableSet来实现重?用功能
出屏幕的cell会被添加到mutableSet中,进?入屏幕的cell,先从set中 获取,如果获取不到,才创建?一个cell。在cell显?示之前,给cell赋上
相应的内容。
cell的reuseIdentifier是重?用的关键;

// =============

tableView默认是?一个分区,可以设置多个分区 tableView的plain、group样式决定分区的样式不同
每个分区可以设置区头区尾;

// =============

 UITableView * tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 50, 320, 400) style:UITableViewStylePlain];
  //  tableView.rowHeight = 50;
   // tableView.backgroundColor = [UIColor redColor];
  
  //  tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLineEtched;

    tableView.separatorColor = [UIColor redColor];
   
    tableView.dataSource = self;
  //  tableView.contentSize = CGSizeMake(1000, 1000);

    tableView.delegate = self;
    
    [self.view addSubview:tableView];
    [tableView release];
上面的代码实现了两个代理:dataSource和delegate。分别实现不同的方法;

#pragma mark - 设置某一行的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) {
        return 20;
    }
    else
    {
        return 50;
    }
}
#pragma mark - 设置区头自定义
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView * hear = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
    hear.backgroundColor = [UIColor redColor];
    return [hear autorelease];
}
#pragma mark - 设置区头高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 50;
}
#pragma mark - 选中某行
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 页面切换
    if(indexPath.row == 0 && indexPath.section == 0)
    {
    SecondViewController * secondVC = [[SecondViewController alloc]init ];
    [self.navigationController pushViewController:secondVC animated:YES];
    [secondVC release];
    }
    
    NSLog(@"选中某一行");
}
// ====================================
#pragma mark - 每一个分区的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    //NSLog(@"一共10行");
    return 2;
}

#pragma mark - 创建cell以及重用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    /*
     tableView重用机制:当cell移除屏幕时,会被放到tableView的重用队列中,当显示cell时,tableView会根据重用标识在重用队列中取出cell,显示到视图上;
     
     如果tableView能够显示n个cell,那么在tableView创建时,会创建n个cell,当移动时(上一个cell移出一半,下一个cell显示一部分时)会创建第n+1个cell;
     如果移动很快,还可能创建n+2,n+3....个cell,因为移动过快,tableView还来不及从重用队列取出重用cell,就需要显示,所以要创建;
     
     */ 
    // 现查看是否有重用的cell,如果没有,需要创建,如果有,不需要创建。
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"AA"];//标识
    static int count = 0;
    // 如果没有,需要创建
    if (cell == nil) {
        cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"AA"]autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        count ++;
        NSLog(@"创建%d个cell",count);
    }
    else
    {
        NSLog(@"重用");
    }
    cell.textLabel.text = @"郭仔来啦";
    UIImage *img = [UIImage imageNamed:@"bd_logo1.png"];
    cell.imageView.image = img;
    cell.selectionStyle = UITableViewCellSelectionStyleDefault;
    
//    NSLog(@"为每一行提供cell:row:--%d,section:--%d",indexPath.row,indexPath.section);
//    UIImage *img = [UIImage imageNamed:@"bd_logo1.png"];
////    
////    UITableViewCell * cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"AA"];
////    cell.imageView.image = img;
//    
////    UITableViewCell * cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"AA"];
//    // 设置cell的选中样式
//    cell.selectionStyle = UITableViewCellSelectionStyleDefault;
//    // 设置辅助视图样式
//    cell.accessoryType =  UITableViewCellAccessoryDisclosureIndicator;

//    if (indexPath.row%2 == 0) {
//        cell.textLabel.text  = @"A";
//    }
//    else
//    {
//        cell.textLabel.text = @"B";
//    }
//   // cell.textLabel.text = @"A";
//    cell.detailTextLabel.text = @"XXX";
//    cell.imageView.image = img;

    return cell;
}
#pragma mark ----------------
#pragma mark - 设置tableView分区数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}
#pragma mark - 设置区头标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if (section == 0) {
        return @"A";
    }
    else
    {
        return @"B";
    }
  //  return @"区头";
}
#pragma mark - 设置区尾
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
    return @"区尾";
}
#pragma mark - 设置右侧分区索引
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    NSArray * array = @[@"A",@"B"];
    return array;
}
以上代码是两种代理中部分方法的实现。
// =========================

小结:

tableView有2种样式:plain和grouped。 由datasource提供要显?示的数据,delegate提供辅助设置。 系统提供4中样式的cell。 tableView的重?用机制极?大提升了性能。

UI开发----UITableView表视图-1

标签:uitableview   uitableviewcell   ui   

原文地址:http://blog.csdn.net/guoxianzhuang/article/details/45201805

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!