Frage

Ich habe eine UIViewController, diese Steuerung in einem Navigation enthalten. Ich füge eine UITableViewController in diesem Viewcontroller. Ich möchte eine Pushviewcontroller-Methode aufrufen, wenn ich auf einer Zelle meines Tableview drücken.

Ich habe versucht, diese:

UITableViewController


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{   
  FirstView *myViewController = [[FirstView alloc] init];
  [f myViewController];
}

UIViewController (Firstview)


-(void)pushIt
{
    SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:sCont animated:YES];
    NSLog(@"didSelect"); // is printed
    [sCont release];
    sCont = nil;
}

Aber nichts passieren. Ich habe NSLog (), um meine pushIt Methode und ich kann es sehen. Also ich verstehe nicht, warum ich es nicht schieben kann.

Jede Idee?

War es hilfreich?

Lösung

UIViewController hat eine Eigenschaft namens navigationController, die ein UINavigationController zurück, wenn ein für die View-Controller vorhanden sein benanntes aus.

Verwendung dieser Eigenschaft Sie View-Controller auf den Navigationsstapel aus Ihrer Tabelle nach Ansicht des didSelectRowAtIndexPath: Methode schieben kann.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:sCont animated:YES];
    [sCont release];
}

Der Grund Ihr aktueller Code funktioniert nicht, ist wahrscheinlich wegen der folgenden:

  • Sie haben bereits eine Instanz von FirstViewController, wie Sie gesagt haben Sie eine Tabellenansicht als Subview hinzugefügt
  • Sie versuchen, eine neue Instanz eines FirstViewController erstellen, wenn der Benutzer eine Zelle tippt, die nicht auf dem Navigationsstapel, also versuchen, einen View-Controller auf den Stapel schieben von dort nicht funktioniert, weil die navigationController Eigenschaft nil zurück.

Andere Tipps

Sie alloc und MyViewController init aber nie zur Navigation oder Fenster schieben oder was auch immer, dann sind Sie SSERIE zu MyViewController schieben, die nicht am Fenster ist. Versuchen Sie zunächst, nicht mit MyViewController, nächstem Versuch MyViewController zur Navigation zu schieben, bevor SSERIE hinein schieben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top