UITableView的简单使用

 有关于UITableView的介绍,在苹果官网上有比较具体的介绍,下面我还是简单复述一下下。表用于显示数据列表,数据列表中的每项都由行表示 ,共主要作用如下:

  • 为了让用户能通过分层的数据进行导航
  • 为了把项以索引列表的形式展示
  • 用于分类不同的项并展示其详细信息
  • 为了展示选项的可选列表

UITableView的种类:

  • 一种是分组表:                                                          另一种是无格式表 :

1.2                                                     1.1

UITableView的组成:

  表中的每一行都由一个UITableViewCell表示,可以使用一个图像、一些文本、一个可选的辅助图标来配置每个UITableViewCell对象,其模型如下:

cell

UITableViewCell类为每个Cell定义了一些属性:

  • textLabel:Cell的主文本标签(一个UILabel对象)
  • detailTextLabel:Cell的二级文本标签,当需要添加额外细节时(一个UILabel对象)
  • imageView:一个用来装载图片的图片视图(一个UIImageView对象)

UITableView的创建:

create

1.视图布局:UITableView类继承自UIScrollView类,像其他视图一样,其实例通过窗体定义自己的边界,还可以是  其他视图的子类或父类。UITableViewController负责处理布局,并会使用一个UITableView进行填充。

2.指定数据源:UITableView实例依赖外部资源按需为新表格单元或现有表格单元提供内容,数据源根据索引路径提 供表格单元格,索引路径是NSIndexPath类的对象,描述通过数据树到达特定节点的路径,即它们的分段和它们的行。

myIndexPath=[NSIndexPath indexPathForRow:5 inSection:0];

3.指定委托:UITableView实例使用委托响应用户交互,并实现有意义的响应,委托告知表格将响应这些交互的责任移交给指定对象,委托必须实现UITableViewDelegate协议。

实践:

有了上面的一些基本知识,下面做一个小实验。

效果图:

phone1                                        iphone2

 

实现的一些关键代码:

  RootViewController是主屏幕控制器,用来展示最上方的示图。示图的每一行分别由不同的类来创建。

 其每行创建代码如下:

 - (void)createRows
{
    [self addSectionAtIndex:0 withAnimation:UITableViewRowAnimationFade];
    
        [self appendRowToSection:0
            cellClass:[LabelCell class]
            cellData:@"This is row"           
            withAnimation:
         UITableViewRowAnimationLeft];
    
 
    [self addSectionAtIndex:1 withAnimation:UITableViewRowAnimationFade];
    
        [self appendRowToSection:1
            cellClass:[NibLoadedCell class]
            cellData:@"This is row" 
            withAnimation: UITableViewRowAnimationLeft];
            
    
 
    [self addSectionAtIndex:2 withAnimation:UITableViewRowAnimationFade];
    
        [self appendRowToSection:2
            cellClass:[TextFieldCell class]
            cellData:[NSMutableDictionary
             dictionaryWithObjectsAndKeys:
                    @"TextField", @"label", @"", @"value",
                    NSLocalizedString(@"input value here", @""), @"placeholder", nil]
         withAnimation:UITableViewRowAnimationLeft];
    [self hideLoadingIndicator];
}

编写UITableViewCell子类的代码:

  + (NSString *)nibName
{
    return @"NibCell";
}
 
- (void)handleSelectionInTableView:(UITableView *)aTableView
{
    [super handleSelectionInTableView:aTableView];
     
    NSInteger rowIndex = [self indexPath].row;
    [((PageViewController *)aTableView.delegate).navigationController
        pushViewController:
            [[[DetailViewController alloc] initWithRowIndex:rowIndex] autorelease]
        animated:YES];
}
 
- (void)configureForData:(id)dataObject
    tableView:(UITableView *)aTableView
    indexPath:(NSIndexPath *)anIndexPath
{
    [super configureForData:dataObject tableView:aTableView indexPath:anIndexPath];
     
    label.text = dataObject;
}
以上内容是本人学习ios开发的一个小笔记,代码借鉴Matt Gallagher的作品,根据其作品作详细的学习,并加以修改。谢谢阅读,希望对您有用。
完整代码下载 TableDesign


另:

一、建立 UITableView

 DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)];  [DataTable setDelegate:self];  [DataTable setDataSource:self];  [self.view addSubview:DataTable];  [DataTable release];

二、UITableView各Method说明

 

//Section总数 - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{  return TitleData; }

// Section Titles //每个section显示的标题 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{  return @""; }

//指定有多少个分区(Section),默认为1 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {  return 4; }

//指定每个分区中有多少行,默认为1 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ }

//绘制Cell -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier : SimpleTableIdentifier];     if (cell == nil) {           cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault                                        reuseIdentifier: SimpleTableIdentifier] autorelease];  }  cell.imageView.image = image;//未选cell时的图片  cell.imageView.highlightedImage = highlightImage;//选中cell后的图片  cell.text=//.....  return cell; }

//行缩进 -(NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{  NSUInteger row = [indexPath row];  return row; }

//改变行的高度 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{     return 40; }

//定位 [TopicsTable setContentOffset:CGPointMake(0, promiseNum * 44 + Chapter * 20)];

//返回当前所选cell NSIndexPath *ip = [NSIndexPath indexPathForRow:row inSection:section]; [TopicsTable selectRowAtIndexPath:ip animated:YES scrollPosition:UITableViewScrollPositionNone];

[tableView setSeparatorStyle:UITableViewCellSelectionStyleNone];

//选中Cell响应事件 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

 [tableView deselectRowAtIndexPath:indexPath animated:YES];//选中后的反显颜色即刻消失 }

//判断选中的行(阻止选中第一行) -(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {     NSUInteger row = [indexPath row];     if (row == 0)         return nil;         return indexPath; }

//划动cell是否出现del按钮 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { }

//编辑状态 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { }

[topicsTable setContentSize:CGSizeMake(0,controller.promiseNum * 44)]; //右侧添加一个索引表 - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{ }

//返回Section标题内容 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ }

//自定义划动时del按钮内容 - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath

//跳到指的row or section [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:NO];

 

三、在UITableViewCell上建立UILable多行显示

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {     static NSString *CellIdentifier = @"Cell";        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];     if (cell == nil) {         cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];   UILabel *Datalabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 320, 44)];   [Datalabel setTag:100];   Datalabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;   [cell.contentView addSubview:Datalabel];   [Datalabel release];    UILabel *Datalabel = (UILabel *)[cell.contentView viewWithTag:100];  [Datalabel setFont:[UIFont boldSystemFontOfSize:18]];  Datalabel.text = [data.DataArray objectAtIndex:indexPath.row];  cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;     return cell; }

 

 

//选中cell时的颜色

typedef enum {     UITableViewCellSelectionStyleNone,     UITableViewCellSelectionStyleBlue,     UITableViewCellSelectionStyleGray } UITableViewCellSelectionStyle

 

//cell右边按钮格式

typedef enum {
    UITableViewCellAccessoryNone,                   // don't show any accessory view
    UITableViewCellAccessoryDisclosureIndicator,    // regular chevron. doesn't track
    UITableViewCellAccessoryDetailDisclosureButton, // blue button w/ chevron. tracks
    UITableViewCellAccessoryCheckmark               // checkmark. doesn't track
} UITableViewCellAccessoryType

 

//是否加换行线

typedef enum {     UITableViewCellSeparatorStyleNone,     UITableViewCellSeparatorStyleSingleLine } UITableViewCellSeparatorStyle

 

//改变换行线颜色

tableView.separatorColor = [UIColor blueColor];

posted on 2012-03-21 23:53  Hibernate4  阅读(243)  评论(0编辑  收藏  举报

导航