it-swarm.com.de

Tab-Leiste-Anwendung mit Navigationscontroller

Ich habe eine einfache iPhone-App mit einer Registerkartenleiste und 3 Registerkarten. Jede Registerkarte wird als separate Spitze mit einem entsprechenden Controller geladen. Jede Spitze enthält eine Tabellenansicht mit einigen anderen Steuerelementen zum Suchen/Filtern usw.

Was ich möchte (und es scheint nicht möglich zu sein, ein Beispiel dafür zu finden) ist das Hinzufügen eines Navigationscontrollers zur App, so dass jede Spitze (d. H. Jede Registerkarte) zu weiteren Detailseiten führen kann.

Soll ich einen Navigations-Controller zum Hauptfenster hinzufügen und eine IBOutlet erstellen oder die NC zu den Schreibfedern hinzufügen?.

45
Adrian Collins

Wenn Sie eine Tabulatorleiste in einer XIB haben, können Sie dies am einfachsten erreichen, indem Sie ein UINavigationController-Objekt aus dem Bibliotheksfenster (das wie ein linker Navebalken-Button auf goldenem Hintergrund aussieht) in die Baumansicht für die Tabulatorleiste ziehen Nur Textansicht, nicht die GUI). Platzieren Sie den Navigationscontroller in der Registerkartenleiste und ziehen Sie Ihren vorhandenen View Controller in den Navigationscontroller.

Wenn Sie diese Registerkarte anzeigen, sollten Sie oben eine Navigationsleiste sehen. Wenn Sie den Navigationscontroller von einem anderen Xib laden, ändern Sie die Navigationsleiste in der Xib der Registerkartenleiste.

So fügen Sie den NavigationController programmgesteuert hinzu (z. B. in Ihrem AppDelegate) 

  UIViewController  *viewController1, *viewController2;

    viewController1 = [[[UIViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
    UINavigationController *navigationcontroller = [[[UINavigationController alloc] initWithRootViewController:viewController1] autorelease];

    viewController2 = [[[UIViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];

    self.tabBarController = [[[UITabBarController alloc] init] autorelease];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:navigationcontroller, viewController2, nil];

Wenn Sie im Viewcontroller1 über eine Tabellenansicht verfügen, können Sie mit self.navigationController auf den Navigationscontroller zugreifen, z. in didSelectRowAtIndexPath, um eine DetailView zu öffnen

z.B. 

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

In diesem Beispiel enthält der detailViewController eine NIB-Datei, die eine Navigationsleiste mit einer Zurück-Schaltfläche hinzufügt. Wenn Sie detailViewController auch programmgesteuert initiieren, können Sie eine Aktion (GoBack) zu einem UIBarButtonItem hinzufügen, um den detailViewController von seinem Navigationscontroller zu entfernen.

-(void) GoBack
{    
    [self.navigationController popViewControllerAnimated:YES];
}
27
Max Ballo

Mir wurde klar, dass dies zu spät ist, aber diese Frage ist heute die Nummer 1 bei Google-Ergebnissen, und ich dachte, ich würde eine Antwort hinzufügen. Es gibt ein großartiges Youtube-Video-Tutorial von O'Reilly, das Sie durch eine Tab-Bar + Navigations-Controller-App führt. Schau es dir hier an: http://www.youtube.com/watch?v=LBnPfAtswgw

13
dnstevenson

viele Antworten, aber keine geprüft ...

mit Storyboards im Xcode Interface Builder ist das natürlich alles ganz einfach:

legen Sie den gewünschten Navigations-Controller an, und wählen Sie dann MenüEditorund itemEmbed In >und dannTab Bar Controlleraus.

dies funktionierte sogar mit den Navigationscontrollern, die Xcode Ihnen präsentiert, wenn Sie mit der Master/Detail-Split-View-Controller-Vorlage für ein neues Projekt beginnen. In beiden Fällen habe ich jetzt einen Tab-Controller als Master. Beim iPhone werden die Endcontroller vollständig durchlaufen, und beim iPad werden die Registerkarten nur im Master beibehalten (d. h. die Aufteilung rechts im Querformat und der Popover im Hochformat).

9
john.k.doe

Die Art und Weise darüber nachzudenken ist folgende:

Sie möchten, dass jede Registerkarte einen Navigationscontroller hat. Jeder Nav-Controller muss dann über einen Root-View-Controller und eine geladene Nib verfügen.

Fügen Sie also in IB Nav-Controller für jede Ihrer Registerkarten hinzu. Konfigurieren Sie dann jeden Nav-Controller so, dass er über den entsprechenden Root-View-Controller und die entsprechende Nib verfügt.

9
August
6
Sara

Öffnen Sie die XIB-Datei Ihres UITabBarControllers (aus MainWindow.xib).

Gehen Sie zu 'Controller-Attribute der Tab-Leiste'. Dort finden Sie einen Abschnitt "View Controller", in dem die View Controller der einzelnen Registerkarten aufgeführt werden. Ändern Sie einfach den Controller-Typ in NavigationController für die gewünschte Registerkarte.

Wählen Sie die Ansicht des Controllers aus, den Sie geändert haben, und suchen Sie in den Attributen nach der Option loadFromNib, und wählen Sie die richtige Spitze aus. (wie nach dem Ändern der Art des Controllers wäre diese Verbindung verloren gegangen)

1
dsaw

Die Frage ist zu alt, aber SDKs werden aktualisiert und einige Leser benötigen möglicherweise eine neue Antwort. Für Storyboard-Benutzer ist die Antwort auf die Verwendung der Tab-Leiste und des Navigations-Controllers jetzt ziemlich einfach.

  1. Ziehen Sie den Navigations-Controller in das Storyboard.
  2. Weisen Sie dem neuen Navigations-Controller den Startup-Pfeil zu, wobei Sie den Controller als Startpunkt verwenden.
  3. Ziehen Sie den Tabbar-Controller und richten Sie ihn mit den Registerkarten und dem erforderlichen Controller ein. Sie können Tab-Controller mit Registerkarten auch später einrichten, wenn Sie möchten.
  4. Wählen Sie den Navigationscontroller aus und binden Sie den 'Root Viewcontroller' mit dem Tabbar Controller.

Dadurch wird die Anwendung mit Navigations- und Tabview-Controllern geladen.

0
Paresh Thakor