为UITableView的每个部分添加单独的标题

时间:2011-10-06 03:23:03

标签: objective-c ios cocoa-touch uitableview

我正在学习在iOS中创建表格视图。我知道如何创建一个或多个部分的表格,但我不知道如何在每个部分前添加标题。

这是我的代码。

TableViewController.h

#import <UIKit/UIKit.h>
@interface TableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>{
    NSMutableArray *tableDataSource;    
}
@end

TableViewController.m

#import "FourthViewController.h"
@implementation TableViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)dealloc{
    [super dealloc];
    [tableDataSource release];
}

- (void)didReceiveMemoryWarning{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad{
    [super viewDidLoad];

    UITableView *table = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 320, 460) style:UITableViewStyleGrouped];
    [table setDataSource:self];
    [table setDelegate:self];
    [table release];

    tableDataSource = [[NSMutableArray alloc]init];

    NSMutableArray* sec1 = [[NSMutableArray alloc] init];
    [sec1 addObject:@"1"];
    [sec1 addObject:@"2"];
    [sec1 addObject:@"3"];

    [tableDataSource addObject:sec1];
    [sec1 release];

    NSMutableArray* sec2 = [[NSMutableArray alloc] init];
    [sec2 addObject:@"One"];
    [sec2 addObject:@"Two"];
    [sec2 addObject:@"Three"];

    [tableDataSource addObject:sec2];
    [sec2 release];

    [self.view addSubview:table];

}

- (void)viewDidUnload{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    if ( tableDataSource == nil )
        return 1;
    return [tableDataSource count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {    
    NSInteger bucketCount = -1;
    NSObject *target_section;
    if ( tableDataSource == nil )
        return 0;
    if( ( bucketCount = [tableDataSource count] ) < 1 || bucketCount <= section || (target_section = [tableDataSource objectAtIndex:section ]) == nil )
        return 0;
    return [ (NSMutableArray*)target_section count ];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"Cell %i",indexPath.section]];
    if (cell == nil) 
        {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:[NSString stringWithFormat:@"Cell %i",indexPath.section]] autorelease];
        }

cell.textLabel.text = (NSString*)[ (NSMutableArray*)[tableDataSource objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
@end

3 个答案:

答案 0 :(得分:23)

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if(section == 0)
    {
        return @"Title0";
    }
    else if(section == 1)
    {
        return @"Title1";
    }
    else
    {
        return @"Title2";
    }
}

答案 1 :(得分:5)

试试这个:

NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"title1",
                                                                @"title2",
                                                                @"title3",
                                                                @"title4",
                                                                nil];

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    return [array objectAtIndex:section];
}

答案 2 :(得分:0)

您可以调用表视图数据源方法

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    return @"title for header";
}

在这里,您将获得表视图的部分,从检查当前部分

开始
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
     if(section == 0)
      {
        return @"Section 0 title";
      }
     else if (section == 1){
        return @"Section 1 title";
      }
    return @"title for header";
}