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