Reputation: 121
I have a uisegementcontrol and a uibarbutton that gets added to the navigation bar of the navigation controller. When I push to the next view, however, I want them to be removed. I tried several approaches, but nothing seems to be removing them. One approach was using viewWillDisappear and having the segementcontrol and the bar button removedFromSuperView. Another was to call the removeFromSuperView from the method that pushes to the next scene. Nothing seems to be working. I've actually been stuck on this for a really long time!
Also, the view controller "X" that has the segement control and the bar button is presented through a presentViewController. X then pushes the other view controller.
Here is the code for the segement control
NSArray *headers = @[@"Tracks", @"Playlists"];
self.savedMusic = [[UISegmentedControl alloc] initWithItems:headers];
CGSize size = self.view.frame.size;
CGRect segFrame = CGRectMake(80, 5, size.width - 140, 35);
self.savedMusic.backgroundColor = [UIColor blackColor];
self.savedMusic.frame = segFrame;
self.savedMusic.tag =1;
[self.savedMusic setTitle:@"Tracks"
forSegmentAtIndex:0];
[self.savedMusic setTitle:@"Playlists"
forSegmentAtIndex:1];
[self.savedMusic addTarget:self
action:@selector(whatToDisplay)
forControlEvents:UIControlEventValueChanged];
self.savedMusic.selectedSegmentIndex = 0;
[self.navigationController.navigationBar addSubview:self.savedMusic];
Here is the code for the viewWillDisapear
[super viewWillDisappear:animated];
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
self.navigationItem.leftBarButtonItem = nil;
[self.savedMusic removeFromSuperview];
And here is the code for the method that switches to the new view
PlaylistTracksTableViewController *vc = [[PlaylistTracksTableViewController alloc] init];
[self.savedMusic removeFromSuperview];
[[self.navigationController.navigationBar viewWithTag:1] removeFromSuperview];
self.navigationItem.leftBarButtonItem = nil;
[self.navigationController pushViewController:vc animated:YES];
Upvotes: 0
Views: 324
Reputation: 536028
The problem is that what you are doing is not how you manipulate the contents of the navigation bar. Do not talk to self.navigationController.navigationBar
. Instead, each view controller should set its own self.navigationItem
, and the runtime will use that to populate the navigation bar for that view controller.
Upvotes: 1