UINavigationController with UITabBar live bytes - objective-c

I have a navigation controller with 3 view controllers. The third view controller contains a UITabBar and each tab on the tab bar has its own separate navigation controller. When I'm pushing and popping view controllers on the tab bar navigation controllers, all allocations work fine. They rise and decline accordingly. But when I pop the navigation controller that hosts the tab bar (the third VC) back to the second view controller(a view controller without the tab bar) and then back to the third VC again (the one hosting the the tab bar), the live bytes grow to more than what they were before when previously on that same viewcontroller.
Is there something special I need to do when popping the from the tab bar back to the view controller without the tab bar???
Or any other thoughts
I'm using ARC
I also do not use a sub class of UITabBar to control the tab bar

The problem was I was pushing a uitabbarcontroller onto and navigation stack and from what I understand this is not possible.
So instead I start the app out with the uitabbar and display a separate navigation controller as a modal

Related

Show or Present ViewController?

I have an app in swift that starts with a rootViewController containing 3 buttons.
The first one should open a tabViewController with 3 tabs in it.
The second one should open a navViewController with a nested TableViewController that opens another tableViewController
The last one should open a regular view controller with 2 buttons, both opening a navController with a nested tableViewController
Which is the best "pattern" to use? should I use a ContainerViewController as root?
Which method is best to use for the main 3 buttons of the rootViewController to open the related controllers, the show or the present?
This is a sketch of my app: http://i60.tinypic.com/6jq537.png
The main thing to ask is how are these separate views related? And how are they related to the "menu" view at the beginning?
Tab View -
Nested Table View -
Another menu to two more tables...
First I'll go through how I would build each individually...
Tab View
I would probably create this in its own Storyboard. You don't specify if the tabs will have their own navigation in them? If so then each tab should start with a NavigationController. i.e. 1 tab bar controller with 3 tabs. 3 navigation controllers (one per tab) and then the root view controller of each navigation controller will be the content of the tab.
Nested Table View
The navigation of this should be handled in a navigation controller. So you either want to present a navigation controller with the first table view controller in it or you want to use a navigation controller to present it in the first place.
Third view
This is essentially a duplication of the menu view. Except each button goes to the Nested Table View mentioned above. Again, you will need a navigation controller.
What I would do
You probably should be starting with a Navigation Controller as your root view. If you want to get back to your menu view easily then that would make sense.
Then the issue of button 2 and 3 are trivial as you just push them onto the navigation controller.
For the tab bar controller I'd also push it onto the navigation controller but maybe think about hiding the navigation bar during the transition so as not to get caught up in which navigation controller is doing what.

Creating an View without the navigation Item bar in Xcode

I am trying to connect a new empty View(homeScreen) from a ViewController (loginScreen) using Xcode 6 Beta 4 and Swift. A button triggers the segue to the homeScreen View. The problem is that when I add the segue, my blank/empty homeScreen View magically gets a Navigation Item Bar on top of the view.
You can see that without the segue my homeScreen View its empty:
After the segue it looks like this:
As you can see, Xcode inserts the Navigation Item Bar on top (grey rectangle). I would like to know how to get rid of it or how to create an empty View that remains empty even after assigning a segue to it.
Thank you so much for your help!
Cheers!
UPDATE: My goal is to create a navigation bar kind of like the one Facebook implements in its' iOS app. On top have the search bar and maybe some more icons. Does anybody know how to do that? I tried to hide the Navigation bar by selecting my view controller and in the Attributes inspector setting the "Top Bar" attribute to none, but it does not work. Any suggestions?
Thanks again.
Does loginScreen is inside a UINavigationController? If it is, the new showed view controller (homeScreen) is supposed to be in the navigation controller too, and thus it has a navigation bar by default.
You can hide it if you want, but then you have to find an alternative way to navigate in your navigation controller.
Otherwise you can present the homeScreen modally changing the type of segue to "Present Modally".
For more details on view controller presentation see this document plus some updates in iOS8 (WWDC session: View Controller Advancement in iOS8).
EDIT: To implement the FB-like navigation bar I would customize the UINavigationController bar:
read this AppCoda tutorial about customizing the bar
to add a search bar use the code like:
let searchBar = UISearchBar()
...
self.navigationItem.titleView = self.searchBar
This is because the segue is a "push" segue ("Show (e.g. push)") from a View controller that is already included in a Navigation controller. Therefore, it is put in the stack of views of this Navigation Controller, and therefore receives a navigation bar.
If you don't want a navigation bar, then use either a modal segue ("Present modally"), or a custom segue.
Same thing if you need a different navigation Bar (not linked to the first Navigation Controller). You can perfectly have a modal segue leading to a UIViewController, which is embedded in its OWN navigation controller (or having only a navigation bar). Have a look in the menu: "Edit / Embed / Navigation controller".

UIStoryBoard Navigation Controller disappearing after segue

Reference layout via storyboard:
http://i.imgur.com/M7AmdP2.png
Reference landing page:
http://i.imgur.com/Y3g45uy.png
I am trying to use the bottom bar as displayed in picture 2 to control my app. When I select my option on the first page (Such as the songs tab), but when I go to the next page my navigation bar at the bottom disappears. I am using segues to direct my applications view flow.
I have tried making various controllers subclassed to a UITabBarController & pushing as modal. Neither of those kept the navigation controller
You shouldn't have that navigation controller as the initial controller, the tab bar controller should be first. Then, in each of the three tabs, the root view controller should be a navigation controller, followed by the ones you show in your image.

Tab Bar controller disappearing when moving to another view (iOS SDK, Using storyboards)

I am building an iPhone app using storyboards and I have a problem with the tab bar controller. On one of the views that is linked from the tab bar controller (view1), there is a button that leads to another view (view2). On View2, there is a button that leads back to View1. Very straight forward. But when I go from view1 to view2, the tab bar disappears, and even worse, when I go back to View1, the tab bar is still gone...
How can I fix that? (I have yet to put ANY code in the app, there is only the storyboard and the apple provided AppDelegate Class (and also a main file I suppose, but I am not intending on touching that).
Any Reply is Highly appreciated!
If you do a modal segue from a view that is a tab bar view, it will get rid of the tab bar for the modal view you are presenting.
Secondly, when you segue you are creating a new instance of the view controller. So I am guessing you are segueing from view1 to view2 and losing the tab bar, then you are segueing back to view1. At this point you have created view1, view2, and a second copy of view1 that does not have a tab bar.
I would suggest one of two things.
1.) If you want to keep the tabs at the bottom when you segue from view1 to view2, then click on view1, at the top of the screen select Editor/Embed In/ Navigation Controller. This will embed your view1 in a navigation controller. Then if you change your segue from Modal to Push it will keep your tab bars at the bottom. The navigation bar at the top also make it easy to go back from view 2 to view 1 the correct way (by popping the view) rather than creating a new segue. If you do not like the navigation bar, then you can change the "Top Bar" property to "None" in the inspector. You will then need to create some other way in view2 to get back to view1. (BY POPPING THE CONTROLLER, NOT BY SEGUEING)
2) If you don't want to set up a navigation controller you will have a little bit harder time keeping the tab bar stuff at the bottom of the view2 controller. In fact, I'm not sure you can do it at all with a modal segue, you'd probably have to write some type of custom segue. Either way, If you want to transition back to view1 and get to the correct controller (not a new version without the tabs) then you need to attach an action to whatever button you are using to segue and use the following code (I also attached the code for navigation controller push segues, in case you create a navigation controller and get rid of the navigation bar.)
For Modal Segue:
[self dismissModalViewControllerAnimated:YES];
For Push segue:
[self.navigationController popViewControllerAnimated:YES];
Your best bet is to use the navigation controller method, as you are assured to keep your tabs. You can then either use the navigation bar to return (the easy way, no code needed) or you can get rid of it and use a button and the code above.
Good luck!
I had the same problem, i know this is an old question but [self dismissModalViewControllerAnimated:YES]; is deprecated in iOS 6.
What i used is:
[self dismissViewControllerAnimated:YES completion:nil];

In Interface Builder, can't set a UITabBarCotnroller's "Top Bar" to Navigation Controller

I create a new XIB file, drag a UITabBarController in it, and then try to set the Top Bar to Navigation Bar.
No matter what I do, it goes back to Unspecified.
I think I should be able to set the Top Bar to Navigation Bar so I can lay out my views assuming I've got both a tab bar and a navigation bar, shouldn't I?
Is this intended behaviour???
I think this is an Apple way to remind you that UITabBarController is not supposed to be pushed in UINavigationController. Related question - Tab bar controller inside a navigation controller, or sharing a navigation root view.