2011-10-06 13 views
13

Sto imparando a creare visualizzazioni di tabelle in iOS. So come creare una tabella di una o più sezioni, ma non so come aggiungere un titolo davanti a ciascuna sezione.Aggiungi titolo separato a ciascuna sezione di UITableView

Ecco il mio codice.

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 

risposta

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

Grazie. Cosa succede se il numero di sezioni è più di due? – lavitanien

+2

Aggiungi altro se blocchi. O usare la scatola del cambio. – Akshay

5

Prova questo:

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

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

È possibile chiamare il metodo tabella di vista origine dati

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

Qui potrete ottenere la sezione della vista tabella a partire da tale si controlla la sezione corrente

- (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"; 
} 
+1

Questo aggiunge qualcosa di nuovo? Perché è fondamentalmente la stessa risposta di quella che è già accettata. –

Problemi correlati