2

小さなプロジェクトを作ろうとしています。セグエが機能しない理由を誰かが理解するのを手伝ってくれますか?

#import "CarTableViewController.h"
#import "CarTableViewCell.h"
#import "CarDetailViewController.h"

@interface CarTableViewController ()




@end

@implementation CarTableViewController

@synthesize carMakes = _carMakes;
@synthesize carModels = _carModels;
@synthesize carImages = _carImages;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}



- (void)viewDidLoad
{
    [super viewDidLoad];

    self.carMakes = [[NSArray alloc]
                     initWithObjects:@"Chevy",
                     @"BMW",
                     @"Toyota",
                     @"Volvo",
                     @"Smart", nil];

    self.carModels = [[NSArray alloc]
                      initWithObjects:@"Volt",
                      @"Mini",
                      @"Venza",
                      @"S60",
                      @"Fortwo", nil];

    self.carImages = [[NSArray alloc]
                      initWithObjects:@"chevy_volt.jpg",
                      @"mini_clubman.jpg",
                      @"toyota_venza.jpg",
                      @"volvo_s60.jpg",
                      @"smart_fortwo.jpg", nil];

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    // Return the number of sections.
    return 1;
}



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return _carModels.count;
}



#pragma mark - Table view data source

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"carTableCell";

    CarTableViewCell *cell = [tableView
                              dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[CarTableViewCell alloc]
                initWithStyle:UITableViewCellStyleDefault
                reuseIdentifier:CellIdentifier];
    }

    // Configure the cell...
    cell.makeLabel.text = [self.carMakes
                           objectAtIndex: [indexPath row]];

    cell.modelLabel.text = [self.carModels
                            objectAtIndex:[indexPath row]];

    UIImage *carPhoto = [UIImage imageNamed:
                         [self.carImages objectAtIndex: [indexPath row]]];

    cell.carImage.image = carPhoto;

    return cell;
}

コードは問題なく動作し、tableView をロードしますが、CarDetailViewControler に移動する必要があり、次のコードを使用していますが、動作しません。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"ShowCarDetails"])
    {
        CarDetailViewController *detailViewController =
        [segue destinationViewController];

        NSIndexPath *myIndexPath = [self.tableView
                                    indexPathForSelectedRow];

        detailViewController.carDetailModel = [[NSArray alloc]
                                               initWithObjects: [self.carMakes
                                                                 objectAtIndex:[myIndexPath row]],
                                               [self.carModels objectAtIndex:[myIndexPath row]],
                                               [self.carImages objectAtIndex:[myIndexPath row]],
                                               nil];
    }
}
4

1 に答える 1

4

絵コンテではセル原型を使いましたか?もしそうなら、プロトタイプから目的のViewControllerにコントロールドラッグして、名前付きセグエを作成しましたか?

使用している方法では、セグエをストーリーボードで完全に定義する必要があります。つまり、セグエのトリガーはセル プロトタイプに関連付けられています。

次を使用して、セグエを手動でトリガーできます。

[self performSegueWithIdentifier:@"ShowCarDetails" sender:self];

あなたの:

tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath代替として。

于 2013-02-22T01:52:40.680 に答える