2

Wir haben eine benutzerdefinierte Ansicht, die wie eine Registerkarte aussieht, aber letztlich eine Unterklasse von UIView ist.Erhalten benutzerdefinierter Tab-View-Status zwischen View-Controllern

Die Ansicht wird als Tableiste angezeigt würde am unteren Rand einer UIViewController. Wenn ein Bild im View-Controller berührt wird, wechseln wir zu einem anderen View-Controller.

Der zweite View-Controller hat die gleiche falsche Tabbar-Ansicht, die unten angezeigt wird. Der Benutzer kann den zweiten View-Controller schließen, und es wird wieder auf den ersten View-Controller umgeschaltet.

Was ist der beste Weg, um die gleiche Ansicht und ihren Status für beide View-Controller zu behalten? Zum Beispiel könnte ein Teil der gefälschten Tableiste eine verwendbare Schaltfläche mit einem Abzeichen-Symbol sein, das (2) anzeigt. Wenn das berührt wird, würde es zu (1) gehen. Dies müsste in beiden Fällen der Ansicht berücksichtigt werden.

Wäre der richtige Ansatz, einfach prepareForSegue als normal zu verwenden und den Ansichtszustand zu aktualisieren oder die Sichteninstanz weiterzugeben? Oder gibt es einen besseren Ansatz?

Antwort

2

Ich denke, der beste Ansatz ist, etwas ähnliches mit der nativen Tab-Leiste zu implementieren. Sie können dies erreichen, indem Sie eine container view implementieren. Wie du das machst ist eine lange Geschichte, die hier gepostet wird, aber es gibt viele Quellen im Internet. Grundsätzlich haben Sie die gleiche falsche Leiste und Ihr View-Controller wird in der Containeransicht angezeigt, die direkt über der Tab-Leiste platziert werden sollte. Der Ansichtscontroller mit der Containeransicht und der Registerkartenleiste sollte die Übergänge verwalten und die Leiste aktualisieren.

+1

Lustig genug das war der einzige Ansatz, den ich denken konnte, mit einer Containeransicht. Wird sehen, ob es noch andere Vorschläge gibt, um damit umzugehen – StuartM

1

Ja, genau wie Jelly sagte ich würde die Eltern/Kind-Ansicht Controller-Route gehen, mit der 'Tab-Leiste' Verwalten Hinzufügen/Entfernen der Ansicht Controller und zugehörige Ansichten als Reaktion auf Touch-Ereignisse.

1

Ich arbeite an der gleichen Szenerie. In einem UIViewController nehmen Sie Ihre tabBar-Ansicht am unteren Rand und darüber eine leere UIView. Klicken Sie nun auf der tabBar Taste, fügen Sie und Ihre neue Viewcontroller Ansicht entfernen mit Autolayout wie as -

#pragma mark - TAB BAR METHODS 

-(void)setSelecedView:(VIEWSELECTION)selecedView 
{ 
    [self RemoveChildViewControllers ]; 
    switch (selecedView) 
    { 
     case VIEWSELECTION_HOME: 
     { 
      HomeViewController *homeVC = [[HomeViewController alloc]initWithNibName:@"HomeViewController" bundle:nil]; 
      [email protected]"Wellborn Company App"; 
      [self displayContentController:homeVC OnView:self.DumpingView]; 
     } 
      break; 
     case VIEWSELECTION_SEARCH: 
     { 
      SearchViewController *searchVC = [[SearchViewController alloc]initWithNibName:@"SearchViewController" bundle:nil]; 
      [email protected]"Search"; 
      [self displayContentController:searchVC OnView:self.DumpingView]; 
     } 
      break; 
}} 

#pragma mark - VC Adding/Removing Methods 

- (void)RemoveChildViewControllers 
{ 
    NSArray *childVCArray = [self childViewControllers]; 

    for (__strong UIViewController *childvc in childVCArray) 
    { 
     [childvc willMoveToParentViewController:nil]; 
     [childvc.view removeFromSuperview]; 
     [childvc removeFromParentViewController]; 
    } 
} 

- (void)displayContentController:(UIViewController*) content OnView:(UIView*)parentView 
{ 
    [self addChildViewController:content]; 
    [parentView addSubview:content.view]; 

    NSDictionary *views = @{ 
          @"childView" : content.view, 

          }; 
    NSArray *arr; 

    [content.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 

    arr = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[childView]-0-|" options:0 metrics:nil views:views]; 
    [parentView addConstraints:arr]; 

    arr = [NSLayoutConstraint constraintsWithVisualFormat:@"|-0-[childView]-0-|" options:0 metrics:nil views:views]; 
    [parentView addConstraints:arr];  
    [content didMoveToParentViewController:self]; 
} 
1

Wenn es nur eine Ansicht und Ihre einfach Ansicht-Controller auf einem Navigationsstapel gedrückt wird, dann im Hinblick auf Ihre Navigation hinzufügen View Controller Ansicht.

[self.navigationController.view addSubview:view];