0

我正在编写“Beginning iPhone 4 Development”一书中的教程,在第 9 章中,他们有以下代码片段:

http://www.apress.com/downloadable/download/sample/sample_id/5/

#import "FirstLevelViewController.h"
#import "SecondLevelViewController.h"
#import "DisclosureButtonController.h"

@implementation FirstLevelViewController


@synthesize controllers;



-(void)viewDidLoad{

    self.title=@"First Level";  
    NSMutableArray * array = [[NSMutableArray alloc] init];

    //Disclosure Button 
    DisclosureButtonController *disclosureButtonController = [[DisclosureButtonController alloc]initWithStyle:UITableViewStylePlain];

    disclosureButtonController.title = @"Disclosure Buttons";
    disclosureButtonController.rowImage = [UIImage imageNamed:@"disclosureButtonControllerIcon.png"];
    [array addObject:disclosureButtonController];
    [disclosureButtonController release];

    self.controllers = array;
    [array release];
    [super viewDidLoad];

}


-(void)viewDidUnload{

    self.controllers = nil;
    [super viewDidUnload];
}


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



#pragma mark -

#pragma mark Table Data Source Methods
-(NSInteger) tableView: (UITableView *)tableView
numberOfRowsInSection:(NSInteger)section{

    return [self.controllers count];

}


-(UITableViewCell *) tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *) indexPath{


    static NSString *FirstLevelCell = @"FirstLevelCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:FirstLevelCell];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:FirstLevelCell]autorelease];
    }


    //configure the cell
    NSUInteger row = [indexPath row];
    DisclosureButtonController *controller = [controllers objectAtIndex:row];
    cell.textLabel.text=controller.title;
    cell.imageView.image = controller.rowImage;
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    return cell;


}

#pragma mark - 
#pragma mark Table View Delegate Methods

-(void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath{


    NSUInteger row = [indexPath row];

    SecondLevelViewController *nextController = [controllers objectAtIndex:row];
    [self.navigationController pushViewController:nextController animated:YES];


}



@end

最后的声明:

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

对我来说毫无意义,因为本质上您正在推动相同的现有控制器。但是,当我编译应用程序并运行时,一切正常。我的问题是这个应用程序如何让我进入下一个屏幕?

4

1 回答 1

1

最后一句话对我来说毫无意义,因为本质上您正在推动相同的现有控制器。

您不是在推送相同的现有控制器,而是在推送来自控制器数组的nextController :

nextController = [controllers objectAtIndex:row];

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

于 2011-04-24T03:43:19.333 回答