How to add buttons to navigation controller visible after segueing?
Asked Answered
P

7

43

I have set up a view controller in Storyboard which is embedded in a navigation controller. In this nav controller I have checked Shows Navigation Bar and Shows Toolbar and enabled a navigation bar and toolbar in Top Bar and Bottom Bar respectively in Simulated Metrics. I then "Show e.g. Push" segue from the view controller to another view controller. On both view controllers I've set up Simulated Metrics the same way, so both the navigation bar and toolbar are visible on all three controllers.

The problem is, I can add bar button items to the first view controller to both the navigation bar and the toolbar, but I cannot add a bar button item to the navigation bar on the second view controller. When I drop a button on the navigation bar, it's added to the toolbar instead. And I cannot double click the nav bar to add a title. In the outline I see there is no navigation item on the second view controller, but it is there in the first view controller.

I can probably add buttons to the navigation bar programmatically, but I want to do this visually in Storyboard. My question is, what is wrong with this setup, or is this a bug with Xcode?

enter image description here

enter image description here

Prostomium answered 30/8, 2014 at 23:3 Comment(1)
See also another related problem that occurs in Xcode 8: #24718073Meaganmeager
Z
91

For XCode 6, the UINavigationItem for the 2nd view controller onwards is not added automatically on the View Controller Object inside the storyboard. You will have to drag the UINavigationItem onto the Navigation Bar for that view Controller Object before adding UIBarButtonItem on top of it.

I am not sure why it is designed that way. I only discovered about this a few weeks ago.

Xcode 6 UiNavigationItem

Zantos answered 31/8, 2014 at 2:0 Comment(5)
Actually, I don't know it is a bug. I thought it is designed that way for the developer to have more control.Zantos
I'll report it, they'll know if that's expected behavior or not. :)Prostomium
This is definitely NOT the reason. I'm using Xcode 6.4, it does add navigation items automatically (If there is a title, there is an UINavigationItem as well. And I can see it, click it, change the title on it so on so on so on. Everything works except adding buttons. Re-adding (overriding) the item DOES help indeed. So thanks! I bet my unborn kids, it's a bug!Spokesman
@Julian Maybe they fixed the behaviour in 6.4 because I'm using 6.2 and the Navigation Item was definitely not there until I added it.Drove
Great solution!Phototype
K
12

If you have a ton of view controllers and very little custom auto-layout stuff in place, you can disable size classes, then re-enable it will add all missing nav bars across your storyboard.

enter image description here

enter image description here

Obviously not recommended if you have a ton of custom auto layout stuff linked up.

If you have just a single UIViewController that's missing a nav bar, just drop a UINavigationItem onto it.

Karenkarena answered 20/3, 2015 at 3:56 Comment(2)
Worked for me, interesting!Ixion
I know this is old but this worked for me. Little annoying but works none the less.Transistorize
Q
3

If you're using Xcode 7 beta 4/5, try restarting Xcode it solved the issue for me

Quid answered 25/8, 2015 at 5:51 Comment(0)
Q
1

I just bumped into this issue and it seems to be affected by the segue that shows the view controller.

If "Kind" setting in segue is "Show (e.g. Push)", it's not possible to drag the item to top right corner. However, if you explicitly change "Kind" setting to "Push", this can be done.

Edit: actually I just noticed that "Push" is deprecated. Not sure what Apple is thinking here. However, you can just change it back to "Show" after adding the button and it seems to work :D

Quanta answered 10/1, 2019 at 10:23 Comment(1)
Yes, this is weird that you have to change it to (deprecated) Push and then back to Show for the Navigation Item to appear in the listOleic
F
0

For second view controller in hierarchy, you can setup title in attributes, without adding "navigation item" enter image description here

Frozen answered 14/1, 2015 at 10:6 Comment(0)
S
0

I think it is a bug. I had the same problem.I fixed this problem by disable the size classes, then enable it.

You can disable and enable the size classes in Interface builder doc.

enter image description here

Seaworthy answered 25/5, 2016 at 5:12 Comment(1)
This is same answer as William T's answer from a year ago. Please read existing answers before adding a new answer to old questions. Thanks.Bongbongo
T
0

It's very simple. You just need to use navigaitonItem first as the holder of the buttons and then you can add barButtonItems on top of that.

Terminator answered 21/4, 2017 at 21:30 Comment(2)
Can you expand on this?Sulfide
Yes, sure. follow the steps: 1- drag a navItem from the object library to your viewController, 2- drag a barButtonItem from the library and place it on top of the navigationItem that you've just added to the view. 3- run the application and you should have the barButtonItem on the screen now.Terminator

© 2022 - 2024 — McMap. All rights reserved.