How does the search display controller hide the navigation bar? - iphone

When you enter the search bar handled by a search display controller, it slides the view up and pushes the navigation bar up with it. This is easy enough to do, however, when you click a search result and a new view is pushed on the navigation controller's stack, the navigation bar slides in from the right with the view!
How is this done? If you simply set the navigation bar to hidden or shown, it happens instantly. I can't figure out how it seems to be hidden just for one view controller in the stack!
Many thanks,
Michael

You can animate the transition of the navigation bar. See -setNavigationBarHidden:animated: for more details.
If you need to do this on a per-view controller basis, just override the view controller's -viewDidAppear: and -viewWillDisappear: methods, e.g.:
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
The above will hide the navigation bar when this view controller is pushed on top of the navigation stack, and show the navigation bar when the view controller is popped off.
You can call -setNavigationBarHidden:animated: whenever you want, but those two methods are useful for applying lots of UI changes.

-(void)viewDidLayoutSubviews{
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
it will not hide navigation bar.

Related

iOS UINavigationController

I am having an issue when im using navigation controller.
My program is laid out where I have a start screen (not in the navigation controller) and then when you press a button it sends you to the navigationController and new view.
Is there a way to get back out of the navigation controller back to that home screen using a back button.
OR
if i included the start screen as the root for the navigation controller is there a way to hide the top bar in the view.
The reason i didn't include the start screen originally is because I didn't want the navigation bar on the screen.
Thanks.
For hide the UINavigationBar then use bellow line in viewWillAppear: method of your start screen viewController..
[self.navigationController setNavigationBarHidden:YES];
OR
[self.navigationController setNavigationBarHidden:YES animated:YES];
AND you can go back to previous view and also home screen or parent view with bellow code...
-(IBAction)yourButton_Clicked:(id)sender{
[self.navigationController popViewControllerAnimated:YES];//// For back to Previous view
// [self.navigationController popToRootViewControllerAnimated:YES]; // For Back to home screen or parent view
}
Well there is a very simple method to just hide the UINavigationBar when you want to like this in the ant view :-
[self.navigationController setNavigationBarHidden:YES];
and the in the view in which you would want to show it simply unhide it like this :-
[self.navigationController setNavigationBarHidden:NO];
You can use navigation bar in all screens. But for the screen where you dont want to show it, Just use hide property for navigation bar. That screen will not show navigation bar on top.
[[self navigationController] setNavigationBarHidden:YES animated:YES];
It'll resolve your issue.
- (void) viewWillAppear:(BOOL)animated{
[self.navigationController setNavigationBarHidden:YES animated:animated];
[super viewWillAppear:animated];
}
- (void) viewWillDisappear:(BOOL)animated{
[self.navigationController setNavigationBarHidden:NO animated:animated];
[super viewWillDisappear:animated];
}
By implementing this on your home Screen you can hide the top bar
If you're using storyboard you could create a UIButton and link the view back modally.
Also check out https://stackoverflow.com/a/8348527/401787 for navigating between view controllers.
Actually your requirement are not clearer.
But to hide your navigation controller you can use,
self.navigationController.navigationBarHidden=YES;
and also you can add your custom button on to the navigation bar.
UIBarButtonItem *leftBtn=[[UIBarButtonItem alloc]initWithTitle:#"Back" style:UIBarButtonSystemItemAction target:self action:#selector(backBtnClicked:)];
self.navigationItem.leftBarButtonItem=leftBtn;
and you can right your requirements in the backBtnClicked: method.
you can also navigate to your root level view controller.
U can hide the navigation bar using
self.navigationController.navigationBarHidden = YES;
Add the start screen as sub view to navigation's root view controller.
[self.view addSubview:startScreen.view]
Later Remove it by [startScreen.view removFromSuperview] and set the navigationBarHidden flag to NO.

Hide Navigation Bar on one view controller, show it on the pushed one

I have searched a lot but didn't find a solution to my problem.
I have a search bar on my root view controller. When I select it, my keypad appears and I hide (animated) the navigation bar. Now, when I press on one cell, I push a new view controller.The problem is that when I show the navigation bar, it doesn't look natural, it comes from the top, and the pushed view controller comes from the right. I want to do something similar to the email application: the pushed view controller and the navigation bar to come together from the right.
Thank you.
You need to set the navigation bar visible in ViewController A (with Navbar hidden) like this:
-(void)viewWillDisappear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:NO];
}
and in ViewController B you need to write this code in the ViewDidLoad or ViewWillLoad:
[[self navigationController] setNavigationBarHidden:YES animated:NO];
that's working for me, hope this can help.

how to work without with navigation controller

hi before i never use navigation controller,
can i use navigation controller like this
consider in my app there is three view (ie main view, first view, second view)
on main view, two UIButton's with button action to move into first view and second view respectively
and to go back to main view, i have to place navigation controller(like back button wiht title) on first view and second view(note:- not navigation controller on main view)
i want to place navigation controller on first view and second view for back to main view
note:- on my main view no navigation controller, navigation controller will be on first and second view used as back buttons and title
can you guide me to the solve this problem
#nandakishore i suggest you to choose the navigation based app in the beginning because you need navigation controller in most of your views(first view and second view)
And you hide the navigation controller when main view didLoad and unhide that when view will dissappear
eg:- In mainview.m
- (void)viewDidLoad {
[super viewDidLoad];
[[self navigationController] setNavigationBarHidden:YES animated:NO];
}
and
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[self navigationController] setNavigationBarHidden:NO animated:NO];
}
now by doing this u will not get navigation controller in mainview but get that in other two views
Hope this may help u....Good luck!!!

How can I dismiss a pushViewController in iPhone/iPad?

I need to make a button to dismiss the child view controller from a pushViewController. The action is exactly like the left (back) button on the top navigation bar.
How can I dismiss a pushViewController? Which method should I use ?
Thanks.
UINavigationController's popViewControllerAnimated: method should do it.
In my case where [self performSegueWithIdentifier:#"showAllContacts" sender:self]; pushes a new ViewController, in order to close(dismiss) that view controller which has been pushed I use:
[self.navigationController popViewControllerAnimated:YES];
This is called for a custom button which I added to the navigation bar!

How to add UINavigationController to UITabBar app's first view?

This might not be exactly what you're thinking. I have a UITabBar app, with three tabs, all of which are linked to separate UIViews. On the first UIView (the default launch view) I have a search form. This view does not have a UINavigationController (as it's not wanted on this page).
When the user clicks search, I want to load a new view which has a UINavigationController (and still displays the Tab Bar at the bottom, with the first tab still highlighted).
From there, I want to just utilise the view as I normally would (which is out of the scope of this question so don't worry about that).
How would I go about doing this? I've seen some tutorials that suggest changing the class of the first view of the UITabBar from View Controller to Navigation Controller, but this adds the controller to the top of the first view (my search form) which isn't what I want :(.
Thanks in advance Stack Overflow!
Panic over - I have found a nice solution:
- (void) viewWillAppear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:YES animated:animated];
[super viewWillAppear:animated];
}
- (void) viewWillDisappear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:NO animated:animated];
[super viewWillDisappear:animated];
}
This hides the UINavigationController on the first view.