开发者

iPhone Table View Section Headers

开发者 https://www.devze.com 2023-01-30 02:56 出处:网络
I have a TableView with custom cells. I need to be able to put 2 section headers called Instruction and Reference.

I have a TableView with custom cells.

I need to be able to put 2 section headers called Instruction and Reference.

I need 7 rows for the Instruction section and 3 rows for the Reference section.

Here is how I have coded my table view. I know it is not ideal but I am new to this:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [listOfItems count];}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}

switch (indexPath.row) {
    case 0:
        cell.customLabel.text = @"Anatomy";
        cell.customImage.image = [UIImage imageNamed:@"anatomy.png"];
        cell.arrowImage.image = [UIImage imageNamed:@"arrow.png"];

        break;
    case 1:
        cell.customLabel.text = @"Indications";
        cell开发者_如何学Go.customImage.image = [UIImage imageNamed:@"Info.png"];
        cell.arrowImage.image = [UIImage imageNamed:@"arrow.png"];

        break;
    case 2:
        cell.customLabel.text = @"Medications";
        cell.customImage.image = [UIImage imageNamed:@"pill.png"];
        cell.arrowImage.image = [UIImage imageNamed:@"arrow.png"];

        break;
    case 3:
        cell.customLabel.text = @"Equipment";
        cell.customImage.image = [UIImage imageNamed:@"spanner.png"];
        cell.arrowImage.image = [UIImage imageNamed:@"arrow.png"];
        break;
    case 4:
        cell.customLabel.text = @"Procedure";
        cell.customImage.image = [UIImage imageNamed:@"procedure.png"];
        cell.arrowImage.image = [UIImage imageNamed:@"arrow.png"];
        break;
    case 5:
        cell.customLabel.text = @"Complications";
        cell.customImage.image = [UIImage imageNamed:@"complication.png"];
        cell.arrowImage.image = [UIImage imageNamed:@"arrow.png"];
        break;
    case 6:
        cell.customLabel.text = @"Procedure Video";
        cell.customImage.image = [UIImage imageNamed:@"procedure.png"];
        cell.arrowImage.image = [UIImage imageNamed:@"arrow.png"];
        break;
    case 7:
        cell.customLabel.text = @"Calculations";
        cell.customImage.image = [UIImage imageNamed:@"math.png"];
        cell.arrowImage.image = [UIImage imageNamed:@"arrow.png"];
        break;
    case 8:
        cell.customLabel.text = @"Videos & Images";
        cell.customImage.image = [UIImage imageNamed:@"Pin.png"];
        cell.arrowImage.image = [UIImage imageNamed:@"arrow.png"];
        break;
    case 9:
        cell.customLabel.text = @"Feedback";
        cell.customImage.image = [UIImage imageNamed:@"feedback.png"];
        cell.arrowImage.image = [UIImage imageNamed:@"arrow.png"];
        break;
    default:
        break;
}
return cell;}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0) {
    AnatomyWeb1 *test1 = [[AnatomyWeb1 alloc] initWithNibName:@"AnatomyWeb1" bundle:nil];

    [self.navigationController pushViewController:test1 animated:YES];

    [test1 release];
}
if (indexPath.row == 1) {
    Indications *test1 = [[Indications alloc] initWithNibName:@"Indications" bundle:nil];

    [self.navigationController pushViewController:test1 animated:YES];

    [test1 release];
}
if (indexPath.row == 2) {
    Medication *test6 = [[Medication alloc] initWithNibName:@"Medication" bundle:nil];

    [self.navigationController pushViewController:test6 animated:YES];

    [test6 release];
}
if (indexPath.row == 3) {

    ProcedureWeb1 *test3 = [[ProcedureWeb1 alloc] initWithNibName:@"ProcedureWeb1" bundle:nil];

    [self.navigationController pushViewController:test3 animated:YES];

    [test3 release];
}
if (indexPath.row == 4) {
    ProcedureWeb3 *test3 = [[ProcedureWeb3 alloc] initWithNibName:@"ProcedureWeb3" bundle:nil];

    [self.navigationController pushViewController:test3 animated:YES];

    [test3 release];
}
if (indexPath.row == 5) {
    Complications2 *test4 = [[Complications2 alloc] initWithNibName:@"Complications2" bundle:nil];

    [self.navigationController pushViewController:test4 animated:YES];

    [test4 release];
}
if (indexPath.row == 6) {
    [self video1];
}
if (indexPath.row == 7) {
    Calculations1 *test3 = [[Calculations1 alloc] initWithNibName:@"Calculations1" bundle:nil];

    [self.navigationController pushViewController:test3 animated:YES];

    [test3 release];

}
if (indexPath.row == 8) {
    VideosAndImages *test3 = [[VideosAndImages alloc] initWithNibName:@"VideosAndImages" bundle:nil];

    [self.navigationController pushViewController:test3 animated:YES];

    [test3 release];

}
if (indexPath.row == 9) {
    Feedback *test11 = [[Feedback alloc] initWithNibName:@"Feedback" bundle:nil];

    test11.previousViewController=self;

    test11.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

    [self presentModalViewController:test11 animated:YES];

    [test11 release];
}}

Thanks for any suggestions guys.


Same as you have used indexPath.row you would use indexPath.section for identifying the currently active section. For example in cellForRowAtIndexPath you could have two nested switch statements, one for the section, one for the row.

Populate the other method for the tableView (without claiming completeness here):

numberOfSectionsInTableView will return 2 (two sections), numberOfRowsInSection will return 7 or 3 depending of the section active, titleForHeaderInSection will return (if needed) the string you want to see on top of your section.

And on a personal note: you might not want to call your view test1, better declare it as

AnatomyWeb * anatomyWeb = ...
Indications * indications = ...

You are using test3 multiple time and a "testX" naming style can be pain to debug

0

精彩评论

暂无评论...
验证码 换一张
取 消