iOS navigation with TabBarController and NavigationController - ios

I have a RootViewController which is a TabBarController which have 5 ChildViewControllers. Each child is a NavigationController. Each child will be able present a FullScreenController which have modalTransitionStyle set to OverFullScreen and present by calling showDetailViewController. The FullScreenController need to be able to further navigate which will push another ViewController into the current NavigationController.
The problem I am facing is that the FullScreenController is presented by the TabBarController, and I cant present the original TabBarController again since it is the PresentingViewController of the FullScreenController.
Anyone know how to properly support a ViewController hierarchy with the following requirements
Should support a navigation bar and a tab bar
Should be able to present a FullScreenController which don't have navigation bar and tab bar
The FullScreenController can navigate to another ViewController which have both navigation bar and tab bar
Should support navigate backward
Each tab on the tab bar represent its own navigation stack

You can add full screen view as child controller to Each Tab bar controller and keep the close button from full screen view (close will take them back to tab bar view).
Hope this will help.

Related

How to keep NavigationController when performSegue from embeded tableviewcontroller

In the bottom left viewcontroller i have a searchbar at the top that call the tableview at the top , the problem is that i want to segue to the right viewcontroller with detail of it, but of course i'm losing my navigationController so when i'm into the right viewcontroller i can't go back anymore, how should i do to go back to my original Viewcontroller ?
Add Navigation Controller as the starting view in storyboard. And then Link RootViewController to it. This will ensure navigation bar in all the views coming next.
you may hide navigation bar in the view where not needed as
self.navigationController?.isNavigationBarHidden = true
push newViewController instead of presenting
Also please check, if you are presenting it modally. Modal segues take over the whole screen, so any navigation bars, tool bars, or tab bars that are in the presenting controller will be covered up. If you want a navigation bar on this modal controller, you'll need to add one specifically to it, and add any buttons you want to that new navigation bar (or tool bar). If you don't want to do this, then don't present it modally, do a push to it.

How to use custom NavigationBar in ios TabBarController

I'm using a TabController which has a Navigation Controller as it's root and all works fine thus far except i would like to show the NavigationBar of the child viewcontrollers within the tab bar but for now just the tabcontroller's Navigation Bar shows.
This is how the tab bar shows now. with It's NavBar
This is the Navbar of the child ViewController I want to show
Embed a UINavigationController for each tab bar item rather than a UIViewController. You can then make the root view controller of each UINavigationController point to the view controller you want to use for that tab.
This allows each tab to have its own navigation bar and navigation stack.
EDIT
Also, if you intend on keeping your current navigation controller as the initial view controller, make sure you hide it's navigation bar by unselecting "Shows Navigation Bar" in interface builder
or by setting it in UITabBarController:
self.navigationController?navigationBar.isHidden = true
or by setting it in UINavigationController:
self.navigationBar.isHidden = true

Pushing viewController which is not in tab controller without hiding the tab bar

I have a tab controller in which five viewControllers are there. I even have a side menu bar which has the list of other viewControllers . My problem is when i try to click any list to move to viewController it get pushed over the screen, hiding the tab bar at the bottom. How can i show the tab bar at bottom for this scenario. I got some ideas but it dint helped.
You need to make sure that your tab bar controller is you root view controller.
Your story board should look like
tabbarController -> NavigationController -> VC1 -> VC2
Your VC1 to VC2 segue has to be a show segue, not a present modally because the second one makes V2 the root view controller.

Navigation Bar not showing in embed Navigation Controller

I'm trying to display the navigation bar at the top of the screen, but it's not showing in embed navigation controller.
Here is how it is in the storyboard:
And here it's in the simulator:
As you can see, I created a custom TabBar (following this tutorial) at the bottom of the screen so I can navigate between the different views.
I believe that I'm going to have to load the navbar programatically because the only solution that I found was to set the navigation controller as the initial view controller, but I already set another view as the initial one so I can't do that.
Issue :
When you instantiate a viewController using storyBoard identifier they wont come with free embedded navigation controller, even if you have added a NavigationController to them. As a result you are adding a viewController without navigation bar to your tab bar VC.
Solutions:
Solution1: If you want each child viewControllers to carry their own navigation controller hence their own navigation stack, provide a storyboard identifier to Navigation Controller behind your child viewControllers and instantiate the Navigation controller itself rather than ViewController. And add NavigationController as you tab bar looking VC's child. Because navigation controller loads the embdedded VC by default you will see your child VC with nav bar.
Solution2: All that you care for is only nav bar than add the Navigation Controller behind the VC containing tab bar looking View.
Hope it helps
Have you tried constraining the navigation bar to your view? Otherwise it can move offscreen.
You need to point the tab bar controller segue to the navigation controller of your view - otherwise if you point the segue straight to the view you're just loading the view without any navigation controller attached.

swrevealviewcontroller navigation item and bar button missing

hello I have implemented SWRevealViewController in my swift app. The problem I am having is If I set SWRevealViewController as my initial ViewController all works fine. But If I launch this controller through code
let nav : UINavigationController = UINavigationController(rootViewController: self.storyboard!.instantiateViewControllerWithIdentifier("swrevealviewcontroller") as UIViewController)
self.navigationController?.presentViewController(nav, animated: true, completion: nil)
the navigation Title and barButtonIcon Disappears which is in my case is a hamburger menu icon.
SWRevealViewController is connected to the HomeViewController. and I am initiating SWRevealViewController when user clicks the login Button.
If you need more information regarding the storyboard screenshot let me know. I'll upload here.
Updated:
storyboard
navigation controller's navigation bar will only show up for view controllers that are contained by that navigation controller. Here, you're presenting a modal view. It's not contained by the navigation controller.
If you want the navigation bar to continue to appear:
If it's purely a matter of style, put a navigation bar on the modal scene you're presenting in the interface builder.
If you need to modally present a view that should be contained in a navigation controller, then you need to present a navigation controller--not a view controller.
Finally, if the view you're presenting is intended to be part of the navigation controller's navigation stack, then you need to present it with a push, not a modal segue.
Update
Do like simple ,
and call the perform segue as
[self performSegueWithIdentifier:#"main" sender:self];
I solved my problem by pointing Navigation Controller first and Tab Bar Controller second. Please, see the picture below.
Hope this help!..Thanks...

Resources