问题
I send the user over to a page on a button click. This page is a UITableViewController.
Now if the user taps on a cell, I would like to push him back to the previous page.
I thought about something like self.performSegue("back").... but this seems to be a bad idea.
What is the correct way to do it?
回答1:
Swift 3:
If you want to go back to the previous view controller
_ = navigationController?.popViewController(animated: true)
If you want to go back to the root view controller
_ = navigationController?.popToRootViewController(animated: true)
回答2:
Swift 3, Swift 4
if movetoroot {
navigationController?.popToRootViewController(animated: true)
} else {
navigationController?.popViewController(animated: true)
}
navigationController is optional because there might not be one.
回答3:
Swift 3
I might be late in the answer but for swift 3 you can do it this way:
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "< Back", style: .plain, target: self, action: #selector(backAction))
// Do any additional setup if required.
}
func backAction(){
//print("Back Button Clicked")
dismiss(animated: true, completion: nil)
}
回答4:
Swift 4
there's two ways to return/back to the previous ViewController :
- First case : if you used :
self.navigationController?.pushViewController(yourViewController, animated: true)in this case you need to useself.navigationController?.popViewController(animated: true) - Second case : if you used :
self.present(yourViewController, animated: true, completion: nil)in this case you need to useself.dismiss(animated: true, completion: nil)
In the first case , be sure that you embedded your ViewController to a navigationController in your storyboard
回答5:
In the case where you presented a UIViewController from within a UIViewController i.e...
// Main View Controller
self.present(otherViewController, animated: true)
Simply call the dismiss function:
// Other View Controller
self.dismiss(animated: true)
回答6:
swift 5 and above
case 1 : using with Navigation controller
self.navigationController?.popViewController(animated: true)
case 2 : using with present view controller
self.dismiss(animated: true, completion: nil)
回答7:
If Segue is Kind of 'Show' or 'Push' then You can invoke "popViewController(animated: Bool)" on Instance of UINavigationController. Or if segue is kind of "present" then call "dismiss(animated: Bool, completion: (() -> Void)?)" with instance of UIViewController
回答8:
for swift 3 you just need to write the following line of code
_ = navigationController?.popViewController(animated: true)
回答9:
Try this: for the previous view use this:
navigationController?.popViewController(animated: true)
pop to root use this code:
navigationController?.popToRootViewController(animated: true)
回答10:
Swift 4.0 Xcode 10.0 with a TabViewController as last view
If your last ViewController is embebed in a TabViewController the below code will send you to the root...
navigationController?.popToRootViewController(animated: true)
navigationController?.popViewController(animated: true)
But If you really want to go back to the last view (That could be Tab1, Tab2 or Tab3 view..)you have to write the below code:
_ = self.navigationController?.popViewController(animated: true)
This works for me, i was using a view after one of my TabView :)
回答11:
For questions regarding how to embed your viewController to a navigationController in the storyboard:
- Open your storyboard where your different viewController are located
- Tap the viewController you would like your navigation controller to start from
- On the top of Xcode, tap "Editor"
- -> Tap embed in
- -> Tap "Navigation Controller
回答12:
This one works for me (Swift UI)
struct DetailView: View {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View {
VStack {
Text("This is the detail view")
Button(action: {
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Back")
}
}
}
}
回答13:
I can redirect to root page by writing code in "viewDidDisappear" of navigated controller,
override func viewDidDisappear(_ animated: Bool) {
self.navigationController?.popToRootViewController(animated: true)
}
来源:https://stackoverflow.com/questions/28760541/programmatically-go-back-to-previous-viewcontroller-in-swift