2011-10-06 7 views
13

Tôi đang học cách tạo chế độ xem bảng trong iOS. Tôi biết cách tạo một bảng gồm một hoặc nhiều phần, nhưng tôi không biết cách thêm tiêu đề vào trước mỗi phần.Thêm tiêu đề riêng cho từng phần của UITableView

Đây là mã của tôi.

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 

Trả lời

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

Cảm ơn bạn. Điều gì sẽ xảy ra nếu số phần nhiều hơn hai? – lavitanien

+2

Thêm người khác nếu chặn. Hoặc sử dụng chuyển đổi trường hợp. – Akshay

5

Hãy thử điều này:

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

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

Bạn có thể gọi phương pháp bảng điểm nguồn dữ liệu

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

Ở đây bạn sẽ nhận được phần của xem bảng kể từ bạn nên kiểm tra phần hiện tại của bạn

- (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

Điều này có thêm bất kỳ điều gì mới không? Bởi vì nó về cơ bản là câu trả lời giống như câu trả lời đã được chấp nhận. –