Does anyone know how to hide a rightBarButtonItem
of a UINavigationController
? In my application, I have an edit button as a rightBarButtonItem
of a UINavigationController
. I want to hide this ? UIBarButton` when some operations are done.

- 6,014
- 5
- 44
- 74

- 327
- 1
- 4
- 14
-
`self.navigationItem.rightBarButtonItems[1] setEnabled:NO];` if you have an array, like if you use flexible space. – Nike Kov Apr 28 '16 at 12:18
3 Answers
To Hide the right button: self.navigationItem.rightBarButtonItem = nil;
Now, to show it:
If you setup the right button in your view controller by assigning it to self.editButtonItem then simply assign it again in order to show it:
self.navigationItem.rightBarButtonItem = self.editButtonItem;
If you setup the right button in your view controller by allocating and initing a UIBarButtonItem, then simply keep a reference to the UIBarButtonItem in your view controller, and assign it again when you need to show it.

- 1,313
- 11
- 15
-
I tried assigning rightBarButtonItem to nil in Objective C it doesn't work for me – Durai Amuthan.H Nov 25 '16 at 10:24
Try
self.navigationItem.rightBarButtonItem = nil;
When you want it back though you will have to instanciate a button i.e.
UIBarButtonItem *rightBarButton =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch
target:self
action:@selector(searchBar:)];
self.navigationItem.rightBarButtonItem = rightBarButton;
[rightBarButton release];

- 6,014
- 5
- 44
- 74

- 11,420
- 15
- 74
- 122
-
1what if i dont want to recreate object? for example, i want to hide rightBarButton to wide frame of searchBar on titleView of navigationBar. i mean, does hiding is possible by changing property or something? – Valerii Pavlov Nov 09 '11 at 12:35
-
if you would like to subclass UINavigationController. you can do: self.topViewController.navigationItem.rightBarButtonItem = rightBarButton; self is your UINavigationController custom class – Jenel Ejercito Myers Nov 23 '16 at 20:06
If you need to hide/show the button based on some condition, try this:
if (condition) {
self.navigationItem.rightBarButtonItem.title = @"";
self.navigationItem.rightBarButtonItem.enabled = NO;
} else {
self.navigationItem.rightBarButtonItem.title = @"my button title";
self.navigationItem.rightBarButtonItem.enabled = YES;
}
This way you don't have to save a reference to the button in a property or worry about wiring up the action on a new button.

- 9,156
- 2
- 42
- 58