Can't get the right bar button item on a navigation bar? - ios

I'm trying to have a button on the right side of my navigation controller - after this works I'd like the button to be as near to invisible as possible while still working. Maybe setting to high transparency or changing the colour to the navigation bar colour (whatever is cheaper for memory).
First though I can't seem to get a visible or working button on the right side of my navigation bar:
self.navigationController.navigationItem.rightBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:#"coin" style:UIBarButtonItemStyleDone
target:self action:#selector(changeToInAppScene:)];

You have to assign to self.navigationItem.rightBarButtonItem (the navigation item of the current view controller), not self.navigationController.navigationItem.rightBarButtonItem .

- (void)viewWillAppear:(BOOL)animated
{
UIBarButtonItem *rightBar = [[UIBarButtonItem alloc]initWithTitle:#"Coin" style:UIBarButtonItemStylePlain target:self action:#selector(changeToInAppScene:)];
self.navigationItem.rightBarButtonItem = rightBar;
}

Related

What causes the navigationBar to turn white hazy color after setting both barItem properties?

I was working on building out a navigation controller and the nav bar all of a sudden added this white hazy color to the nav bar and I don't know what property that is. I've tried turning translucent off and also setting the background color however the new red background color appears behind the white hazy color. What causes this white hazy color and how do I remove it?
Here is my code:
UIBarButtonItem *btnCancel = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:#selector(cancelButtonPressed)];
self.navigationController.topViewController.navigationItem.leftBarButtonItem = btnCancel;
UIBarButtonItem *btnSave = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:nil action:nil];
self.navigationController.topViewController.navigationItem.rightBarButtonItem = btnSave;
The problem was that I placed code inside of view will appear that set an integer variable. As I understand it view did load should come before view will appear so I don't understand why this problem is happening but it was the issue.

Title of navigation bar isn't centred after deleting back button title

When I deleted the title text of my back button, the text of my navigation title is not centred.
I used
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:#" " style:UIBarButtonItemStylePlain target:nil action:nil];
and
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
in both my viewDidLoad and viewWillAppear
this is a screenshot of the result
Any idea how I can fix this?
The UINavigationBar displays the backBarButtonItem of the previous view controller, so you'll need to make sure you are setting that and not the backBarButtonItem of the displayed view controller. The call to setBackButtonTitlePositionAdjustment(_:forBarMetrics:) is not necessary.

Is it possible to add a UIBarButtonItem besides a UISegmentedControl?

I've added a UISegmentedControl to a UINavigation Bar, and when I tried to add a UIBarButtonItem programmatically in viewDidLoad viewController using the following code:
UIBarButtonItem *timeTableBarButton = [[UIBarButtonItem alloc]
initWithImage:[UIImage imageNamed:#"blueRoundRect"]
style:UIBarButtonItemStylePlain
target:self
action:#selector(popUpTimeTable)];
self.navigationItem.rightBarButtonItem = timeTableBarButton;
There are no button showing at all. I wonder since I already have a UISegmentedControl, is it possible to do so?
It is possible to add the Bar button in navigation bar and there is no way your segment control should be blocking right bar button item. Please make sure that your self.navigationItem is not nil.

How to change the backButtonItem title on a UIViewController?

I feel daft asking this question, but I haven't been able to get this to work. I have a NavController->TableViewController->WebViewController. I'm trying to change the title of the backButton on the WVC from the default "Back" to "Reference".
This should be a simple matter of setting the text property of the Back button either in Storyboard (which isn't working) or in code of my WebViewController's viewDidLoad method:
self.navigationItem.backBarButtonItem.title = #"Reference";
Is this just a bug or am I missing something?
Put this in your tableviewController
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:#"Reference" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
Screen shot
From document
If you want to specify a custom image or title for the back button, you can assign a custom bar button item (with your custom title or image) to this property instead.
You should set it in your TableViewController, not in your WebViewContorller
Solved: I had added a grey activity indicator in a small view in the nav bar of the WVC. After I removed it, the code worked fine. Thanks #Leo, #Jacky, #Jaleel!
this work for me
self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:#"Reference" style:UIBarButtonItemStylePlain target:nil action:nil];

Progmatically change UIBarButtonItem identifier on UINavigationBar

So I am just using a normal View Controller. I dragged a Navigation bar to the top and added a UIBarButtonItem with the 'pause' identifier.
I want to be able to change that identifier to the 'play' one.
Is this possible? I can't find any information on it.
I tried creating a new one, but not really sure where to go from there.
UIBarButtonItem *flipButton = [[UIBarButtonItem alloc]
initWithTitle:#"Flip"
style:UIBarButtonItemStyleBordered
target:self
action:#selector(flipView)];
Any help would be great.
You're looking for the UIBarButtonSystemItemPlay. Just set it up, assign your selector and target, and choose which barButtonItem you want.
UIBarButtonItem *playButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:#selector(playButtonPressed:)];
self.navigationItem.rightBarButtonItem = playButton;//Or leftBarButtonItem if you want it to be on the left

Resources