This may be a simple answer, but I am new to this... my back button in the navigation bar is confused and does not want to go back to the Main Menu. Instead, it goes back to the previous view. How can I specify in my app that the "back" button should always go to to a specific view?
All you have to do is create a UIBarButton and connect an outlet to it. In the action:
-(IBAction)MainMenu
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
If you want to go back to the root controller:
popToRootViewControllerAnimated:
Pops all the view controllers on the stack except the root view controller and updates the display.
[self.navigationController popToRootViewControllerAnimated:YES];
If you want to go back to an specific controller:
popToViewController:animated:
Pops view controllers until the specified view controller is at the top of the navigation stack.
You will have to create a new outlet in your view controller to handle the button press. Then use the code NSElvis posted in his answer to pop to root.
Related
I am interested in implementing a back button to segue to a previous view controller. I have tried to embed a navigation bar onto the the top of the table view controller but the issue is when I do segue back to the first view controller, by default, Xcode keeps the navigation bar with a back button to go back to the table view controller. Is there a simpler way to implement a segue to go back to the first VC without the navigation bar remaining?
I'm not too sure if this works, but embed your view controllers including the first one inside the navigation controller. That would make all your view controllers with navigation bar above.
On the main view controller (the one you do not want to have the navigation bar), add the line of code inside your viewDidLoad method.
Swift 3:
self.navigationController?.navigationBar.isHidden = true
I found an easy way. On your TableViewController, drag a UIview to the top of the view controller and itll let you insert the view. From there just add your back button
Just assign your "Back" UIBarButtonItem to this method and it should work.
#IBAction func backButtonPressed(sender: AnyObject) {
self.dismissViewControllerAnimated(true, completion: nil)
}
Sounds like a few problems
1) How are you navigating from the first view controller? Is it with Show (Push) if not, you are replacing the first view controller in your stack.
2) Based on your problem, make sure your first view controller is not embedded in a navigation controller
3) As Dylan mentioned, you need to hook your back button to remove the current view controller to return to the first one
4) Extension of (3), how are you segueing back to the first view controller? If you are explicitly navigating to first view controller with your back button handler, it's not actually going back but rather forward and keep the navigation bar.
Here is the scenario: I have 2 views, each embedded in a navigation controller. The first nav bar has 1 edit nav bar item, when tapped it goes to the 2nd VC. The 2nd VC nav bar has a cancel and save button, and when tapped should respond accordingly. I want to code the cancel action first, which will just call [self dismissViewControllerAnimated:YES completion:nil] but it is not doing anything...
I have also tried [self.navigationController popViewControllerAnimated:YES] and neither works, please help
BTW both segues are push segues
sounds like something off in you segues ...
i did a quick test in the following way:
create two view controllers in the story board ,each has it own navigation controller.
crate a segue from the first view controller to the second one.
2 in the first view controller i added a bar button that preform the segue from 2.
3 to the second view controller i added a bar button with an action that did : popViewControllerAnimated:YES..
all works fine...
though i don't really understand why you need 2 navigation controllers here....
I'm developing an iPad App using storyboards. In this app when the user click on "preferences" appear a modal View. One button of this view send the user to another View Controller (but this view has an action bar to go back to his root view controller), but when user taps the action bar back button nothing happen (it's called navigationController popViewControllerAnimated), the user continue in the same view.
Can anyone help me??
Thanks.
UPDATE:
The code to handle the back button:
- (IBAction)btnBackTapped:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
I'm using Segue (from storyboard) to call this View Controller:
When the user click on "Meus Favoritos"
They will be redirect to this page:
The segue is with a Modal (from image one to two)...
When you are presenting a View Controller modally, it is likely not within a Navigation Controller, so probably the reference to navigationController in your code is nil, can you check that?
If you are presenting your View Controller modally this will work instead
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
However, if you actually want to use a Navigation Controller, you should embed the View Controller that is presenting the Preferences View Controller in a Navigation Controller and present the Preferences View Controller with a show segue instead of a modal one.
I have a problem with the tab bar for my app. When I open my app the bottom tab appears since I am using the Tab bar controller however when I move to another view controller and come back the tab bar is gone. Do I have to do something to the storyboard?
Ok, as I suspected, you're going "back" in an incorrect way. You should never go backwards to a previous controller with a segue unless you use an unwind segue. What you're doing is instantiating a new instance of that controller you think you're going back to -- one that isn't embedded in a tab bar controller. So, you either need to use an unwind segue, or go back in code using dismissViewController:animated:completion: (assuming that you're using modal segues to go forward).
If you navigate to another view with the following:
NamedViewController *svc = [self.storyboard instantiateViewControllerWithIdentifier:#"NamedViewController"];
[self.navigationController pushViewController:svc animated:YES];
and use the following to go back it should work.
[[self.navigationController popViewControllerAnimated:YES] viewWillAppear:YES];
in the top view of my view controller (the last table view controller) has an add navigation item. i added a view controller object from the objects library and i ctrl + dragged from the plus button to the view controller. i tried the app and it works fine but i can't go back to the previous controller when i reach the last controller. since the last controller connected (by segue) to the plus button, i can't have a navigation bar on top. so i added one and added an navigation item called it Done. i created an IBAction method in the class that the last controller subclasses which have the following code:
[self.navigationController popNavigationControllerAnimated:YES];
However, when i run the app and press the Done button to go back, it doesn't work although i feel like what i did is totally legal.
If you would have made the final view controller segue a Push segue, you'd still have the navigation bar with a back button. It makes sense since you're adding a record that you'd want a modal view.
You can dismiss the current modal view with the following code:
[self dismissViewControllerAnimated:YES completion:nil];
Generally, you should use delegation and dismiss it from the presenting view controller. However, I think it's fine to dismiss yourself if you're using storyboards, segues, and ARC.
Did you create a Bar Button Item and assigned its 'selector' callback?