您的位置:首页 > 产品设计 > UI/UE

UITableView的简单使用

2012-03-21 23:53 591 查看
 有关于UITableView的介绍,在苹果官网上有比较具体的介绍,下面我还是简单复述一下下。表用于显示数据列表,数据列表中的每项都由行表示,共主要作用如下:为了让用户能通过分层的数据进行导航为了把项以索引列表的形式展示用于分类不同的项并展示其详细信息为了展示选项的可选列表UITableView的种类:一种是分组表:                                                          另一种是无格式表 :                                                     UITableView的组成:  表中的每一行都由一个UITableViewCell表示,可以使用一个图像、一些文本、一个可选的辅助图标来配置每个UITableViewCell对象,其模型如下:UITableViewCell类为每个Cell定义了一些属性:textLabel:Cell的主文本标签(一个UILabel对象)detailTextLabel:Cell的二级文本标签,当需要添加额外细节时(一个UILabel对象)imageView:一个用来装载图片的图片视图(一个UIImageView对象)UITableView的创建:1.视图布局:UITableView类继承自UIScrollView类,像其他视图一样,其实例通过窗体定义自己的边界,还可以是  其他视图的子类或父类。UITableViewController负责处理布局,并会使用一个UITableView进行填充。2.指定数据源:UITableView实例依赖外部资源按需为新表格单元或现有表格单元提供内容,数据源根据索引路径提 供表格单元格,索引路径是NSIndexPath类的对象,描述通过数据树到达特定节点的路径,即它们的分段和它们的行。
myIndexPath=[NSIndexPath indexPathForRow:5 inSection:0];
3.指定委托:UITableView实例使用委托响应用户交互,并实现有意义的响应,委托告知表格将响应这些交互的责任移交给指定对象,委托必须实现UITableViewDelegate协议。实践:有了上面的一些基本知识,下面做一个小实验。效果图:                                         实现的一些关键代码:  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)];//返回当前所选cellNSIndexPath *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)editingStyleforRowAtIndexPath:(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 *)tableViewtitleForDeleteConfirmationButtonForRowAtIndexPath:(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];
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: