it-swarm.com.de

Storyboard-Navigationscontroller und Registerkarten-Controller

Ich versuche die folgenden Einstellungen in Storyboard zu erhalten.

Storyboard

Wo ich am Anfang eine Tabellenansicht habe und wenn ich auf eine Zelle tippe, muss sie zum Tab-Leisten-Controller wechseln, der funktioniert. Aber jetzt möchte ich einen Titel und eine zusätzliche Navigationsleisten-Schaltfläche in den 2 rechten Controllern. 

Ich kann aber scheinbar keine Schaltfläche dorthin ziehen oder beim Einstellen des Titels wird nichts angezeigt. Wie kann ich dieses Setup im Storyboard erreichen?

bearbeiten:

Aktualisierte Frage, basierend auf der Antwort unten.

New setup

Wenn ich dieses neue Setup (also mit einem zusätzlichen Navigationscontroller dazwischen) habe, kann ich den Titel im Storyboard festlegen. Beim Ausführen der App wird der hinzugefügte Titel jedoch nicht angezeigt. 

edit: Ich habe hochgeladen ein xcode-Projekt mit genau diesem Setup. Vielleicht kann es nützlich sein.

20
Matthijn

Zum Ändern des UINavigationBar-Titels (ohne dass 2 weitere UINavigationController erstellt werden müssen), können Sie dies einfach tun 

[self.parentViewController.navigationItem setTitle:@"Title"];

und zum Hinzufügen der rechten Schaltfläche verwenden

self.parentViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(myRightButton)];

on viewDidLoad-Methode für jede UIViewController, auf die von Ihrer UITabBarController verwiesen wird.

Wenn Sie mit "Navigationsstrukturen" in Ihrer UIViewController von TabItems arbeiten möchten, können Sie Ihre BUFViewController.m dazu bearbeiten:

#import "BUFViewController.h"

@interface BUFViewController ()

@end

@implementation BUFViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self.parentViewController.navigationController setNavigationBarHidden:YES];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
}

-(void)done{
    [self.parentViewController.navigationController popToRootViewControllerAnimated:YES];
}

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

@end

Sie müssen denken, wie sich Ihre UITabBarController in Ihrem übergeordneten NavigationController befindet, Sie möchten also das übergeordnete UINavigationBar ausblenden und Ihre zeigen . Danach können Sie mit popToRootViewControllerAnimated: auf dem UINavigationController des übergeordneten Elements zu Ihrer Tabelle zurückkehren.

Hoffentlich hilft das :)

24
ErickBergmann

Nur für den Fall, dass jemand nach einem schnellen Ansatz suchte:

tabBarController?.title = "Your Title"
tabBarController?.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Right Button Title", style: UIBarButtonItemStyle.Plain, target: self, action: "rightButtonFunction")

Der Code wird am besten in viewDidAppear oder viewWillAppear eingefügt, sodass sich Titel und Schaltfläche ändern, wenn die verschiedenen Registerkarten gedrückt werden.

Sie benötigen auch keine zusätzlichen Navigationssteuerungen für diesen Ansatz.

10
Cradmon

Ich habe mir Ihre Test-App angesehen und sehe den Titel sehr schwach unter der Navigationsleiste. Sie können beide Navigationsleisten sehen, wenn Sie den Registerkartenleisten-Controller auswählen und das Kontrollkästchen "Unter oberen Leisten" deaktivieren. Dies gibt Ihnen jedoch einen seltsamen Schatten in der Navigationsleiste. Ich weiß nicht, ob es eine einfache Möglichkeit gibt, das Problem zu beheben, aber ich denke nicht, dass diese Benutzeroberfläche mit zwei Navigationsleisten auf jeden Fall gut aussieht. Möglicherweise möchten Sie den ursprünglichen Navigationscontroller entfernen und stattdessen den Registerkarten-Controller mit einem modalen Segment anzeigen. Sie könnten den Navigations-Controllern ein Bar-Button-Element hinzufügen. Sie müssten dann noch den modalen View-Controller entfernen.

3
rdelmar

Sie müssen diese Ansichtscontroller durch UINavigationViewControllers ersetzen.

Löschen Sie die rechten beiden View-Controller.

Ziehen Sie 2 UINavigationViewControllers auf das Storyboard und positionieren Sie sie wie gewünscht.

Anschließend müssen Sie diese neuen Steuerelemente für die Navigationsansicht mit dem Steuerelement für die Registerkartenleiste verknüpfen. Klicken Sie bei gedrückter Strg-Taste auf die Navigationssteuerungen, und ziehen Sie sie von der Registerkartenleiste. Wählen Sie "View Controller" aus dem Bereich "Relationship Segue" des Menüs aus. Tun Sie dies für beide Navigationssteuerungen.

1
ColdLogic
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"Overview_Register"])
    {
        WDRegisterViewController *obj=(WDRegisterViewController *)[segue destinationViewController];
        [email protected]"Edit Profile";
        obj.isRegister=NO;
    }
}

            [self performSegueWithIdentifier:@"Overview_Measure" sender:nil];



    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    WDPeekViewController *Peek = (WDPeekViewController *)[sb instantiateViewControllerWithIdentifier:@"WDPeekViewController"];
 [self.navigationController pushViewController:tabBarController animated:YES];
0
Anand