Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add separate title to each section of UITableView

I'm learning creating table views in iOS. I know how to create a table of one or more sections, but I don't know how to add a title in front of each section.

Here's my code.

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
like image 273
lavitanien Avatar asked Oct 06 '11 03:10

lavitanien


2 Answers

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if(section == 0)
    {
        return @"Title0";
    }
    else if(section == 1)
    {
        return @"Title1";
    }
    else
    {
        return @"Title2";
    }
}
like image 179
bitmapdata.com Avatar answered Nov 15 '22 19:11

bitmapdata.com


Try this:

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

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    return [array objectAtIndex:section];
}
like image 39
Rahul Juyal Avatar answered Nov 15 '22 19:11

Rahul Juyal