I have a tabBarController that contains three tabs. I want to show rightBarButtonItem to navigation bar only in 1st ViewController but when i am getting back i want it to be visible again. How to achieve this?
I tried to set enabled=NO for the BarButtonItem but the result wasn't good.
I also tried to set BarButtonItem to nil when the view changes but when i get back has disappeared.
I moved BarButtonItem from viewDidLoad to viewWillAppear but it did't work properly.
This is the code for rightBarButtonItem into viewDidLoad of first ViewController.
UIImage *refreshButtonImage = [UIImage imageNamed:@"9B_Info.png"];
UIImage *refreshButtonImageB = [UIImage imageNamed:@"9A_Info.png"];
UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom];
[refreshButton setImage:refreshButtonImage
forState:UIControlStateNormal];
[refreshButton setImage:refreshButtonImageB
forState:UIControlStateHighlighted];
[refreshButton setImage:refreshButtonImageB
forState:UIControlStateSelected];
refreshButton.frame = CGRectMake(0, 0, 30, 30);
[refreshButton addTarget:self
action:@selector(showImageInfo)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *refreshBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:refreshButton];
self.refreshBtn=refreshBarButtonItem;
[self.tabBarController.navigationItem setRightBarButtonItem:self.refreshBtn];
Do you use storyboard or all in programmatic way ? Try this:
1- open new project ( single view )
2- go into storyboard -> add a navigation controller
3- delete the table view controller
4- set your navigation controller as the start controller ( drag the arrow which points your view controller to your navigation controller )
5- set your view controller as the root view controller of your navigation controller
6- complete with your codes and @Apurv's solution bellow
Replace your below line:
[self.tabBarController.navigationItem setRightBarButtonItem:self.refreshBtn];
With this line:
[self.navigationItem setRightBarButtonItem:self.refreshBtn];
When you want to display it for viewController only, do not add it to tabBarController.
If anyone comes up with this in future this worked for me:
In first view controller i added this to viewWillAppear
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"!!!!");
UIImage *refreshButtonImage = [UIImage imageNamed:@"9B_Info.png"];
UIImage *refreshButtonImageB = [UIImage imageNamed:@"9A_Info.png"];
UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom];
[refreshButton setImage:refreshButtonImage
forState:UIControlStateNormal];
[refreshButton setImage:refreshButtonImageB
forState:UIControlStateHighlighted];
[refreshButton setImage:refreshButtonImageB
forState:UIControlStateSelected];
refreshButton.frame = CGRectMake(0, 0, 30, 30);
[refreshButton addTarget:self
action:@selector(showImageInfo)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *refreshBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:refreshButton];
self.refreshBtn=refreshBarButtonItem;
[self.tabBarController.navigationItem setRightBarButtonItem:self.refreshBtn];
}
And in second View Controller in viewWillAppear method this:
self.tabBarController.navigationItem.rightBarButtonItem=nil;
The problem is that viewDidLoad of each viewController into TabBarController is called only once but viewWillAppear every time that viewController comes up.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.