2017-08-15 5 views
0

In meiner Registerkarte basierte Anwendung habe ich einen View Controller mit einer UITableView, die ich in Storyboard erstellt. Wenn Sie auf eines der Bilder in der Tabelle wischen, möchte ich, dass der aktuelle View Controller (SecondViewController) eine XIB-Datei (SpeciesViewController.xib) lädt, um die App in eine neue Ansicht zu übernehmen. Bisher wird didSelectRowAtIndexPath beim Swipen aufgerufen, aber die XIB-Datei wird nie geladen.View Controller Pushed von anderen View-Controller lädt nie

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    SpeciesViewController* speciesController = [[[SpeciesViewController alloc]initWithNibName:@"SpeciesViewController" bundle:nil] autorelease]; 

    // SpeciesViewController* speciesController = [[SpeciesViewController alloc] init]; 
    Species *theSpecies = [fetchedResultsController objectAtIndexPath:indexPath]; 
    speciesController.theSpecies = theSpecies; 

    switch (sortBySegmentedControl.selectedSegmentIndex) { 
     case kSortByCommonNameFirst: 
      speciesController.title = [theSpecies commonNameFirstLast]; 
      break; 
     case kSortByCommonNameLast: 
      speciesController.title = [theSpecies commonNameLastFirst]; 
      break; 
     case kSortByScientificName: 
      speciesController.title = [[NSString alloc] initWithFormat:@"%@%@", 
             [theSpecies.scientificName substringToIndex:1], 
             [[theSpecies.scientificName substringFromIndex:1] lowercaseString]]; 
      break; 
     default: 
      break; 
    } 

    speciesController.hidesBottomBarWhenPushed = YES; 
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil]; 

    //// Store current index path for viewDidAppear animation. //// 
    self->currentSelectedIndexPath = indexPath; 

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

} 

Die SpeciesViewController Spitze hat SpeciesViewController als seine eigene Klasse im Inspektor Attribute. Aus diesem Grund würde ich erwarten, dass ViewDidLoad oder eine andere Methode von SpeciesViewController.m aufgerufen wird, wenn ich pushViewController:speciesController bin.

Viele Beiträge über Probleme beim Laden einer Feder haben mit Fehlern von initWithNibName vs zu tun. Ich glaube jedoch, dass ich initWithNibName richtig verwende, weil ich das von einem View-Controller aus mache.

Ich freue mich über jede Hilfe! Ich danke dir sehr!

Antwort

0

Ich glaube, Sie nicht Autorelease verwenden sollten, sollte dies funktionieren, wenn nib Name

korrekt ist
SpeciesViewController* speciesController = [[SpeciesViewController alloc]initWithNibName:@"SpeciesViewController" bundle:nil] ; 

und auch ich glaube, Sie sollten zuerst Ihre Tableviewcontroller innerhalb Navigation einbetten, wenn Sie es dann nicht getan haben, denke ich selbst .navigationController ist derzeit null.

Sie können View-Controller vorstellen wie diese

[self presentViewController:speciesController animated:YES completion:nil]; 

Hoffe, es hilft

+0

Gibt es eine Möglichkeit für mich, um die Spitze zu laden von 'SecondViewController', der nicht wirklich ein Navigations Controller benötigen? – Matt

+0

@Matt ja Sie können Ansicht Controller vorstellen, überprüfen Sie meine aktualisierte Antwort, wenn Gesicht Problem, fragen – 3stud1ant3

+0

der presentViewController arbeitete - danke !! – Matt

Verwandte Themen