답변:
스위프트 3 :
이전 뷰 컨트롤러로 돌아가려면
_ = navigationController?.popViewController(animated: true)
루트 뷰 컨트롤러로 돌아가려면
_ = navigationController?.popToRootViewController(animated: true)
.popViewController(animated: true)
_ = self.navigationController?.popToRootViewController(animated: true)
_ =
그것을위한 신속한 관습입니다.
스위프트 3 , 스위프트 4
if movetoroot {
navigationController?.popToRootViewController(animated: true)
} else {
navigationController?.popViewController(animated: true)
}
navigationController는 선택 사항이 아니므로 선택 사항입니다.
[weak self]
및self?.navigationController?.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as?
했지만이를 사용할 때 사용할 수 없습니다
스위프트 3
나는 대답에 늦었을 수도 있지만 신속한 3의 경우 다음과 같이 할 수 있습니다.
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)
}
dismiss:
하면 현재 뷰 컨트롤러뿐만 아니라 루트 뷰 컨트롤러도 닫히게되며 여기에서 요청한 것이 아닙니다.
dismiss(animated: true, completion: nil)
회전 후 작동하지 않습니다!
스위프트 4
이전 ViewController로 돌아가거나 되 돌리는 두 가지 방법이 있습니다.
self.navigationController?.pushViewController(yourViewController, animated: true)
이 경우에 당신이 필요로 사용self.navigationController?.popViewController(animated: true)
self.present(yourViewController, animated: true, completion: nil)
이 경우에 당신이 필요로 사용self.dismiss(animated: true, completion: nil)
첫 번째 경우 스토리 보드의 navigationController에 ViewController를 내장했는지 확인하십시오.
당신이 제시하는 경우 UIViewController
내에서 UIViewController
즉 ..
// Main View Controller
self.present(otherViewController, animated: true)
간단히 dismiss
함수를 호출하십시오 .
// Other View Controller
self.dismiss(animated: true)
self.dismiss(animated: true)
-회전 후 작동하지 않음
마지막으로 TabViewController를 사용하는 Swift 4.0 Xcode 10.0
마지막 ViewController가 TabViewController에 포함되어 있다면 아래 코드는 루트로 당신을 보낼 것입니다 ...
navigationController?.popToRootViewController(animated: true)
navigationController?.popViewController(animated: true)
그러나 실제로 마지막보기로 돌아가려면 (Tab1, Tab2 또는 Tab3보기 일 수 있습니다.) 아래 코드를 작성해야합니다.
_ = self.navigationController?.popViewController(animated: true)
이것은 나를 위해 작동합니다. 내 TabView 중 하나 후에보기를 사용하고있었습니다 :)
스토리 보드의 viewController를 navigationController에 포함시키는 방법에 대한 질문 :
이것은 나를 위해 일한다 (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")
}
}
}
}
나는 이렇게 했어
func showAlert() {
let alert = UIAlertController(title: "Thanks!", message: "We'll get back to you as soon as posible.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
self.dismissView()
}))
self.present(alert, animated: true)
}
func dismissView() {
navigationController?.popViewController(animated: true)
dismiss(animated: true, completion: nil)
}
이 문제에 대한 또 다른 접근법을 제안하고 싶습니다. 탐색 컨트롤러를 사용하여보기 컨트롤러를 팝하는 대신 되감기 해제를 사용하십시오. 이 솔루션에는 몇 가지 중요한 장점이 있습니다.
Unwind Segues Step-by-Step 에서 자세한 내용을 확인할 수 있습니다 . 방법은 이전 링크에서 데이터를 다시 보내는 방법을 포함하여 더 잘 설명되어 있지만 여기서는 간단한 설명을합니다.
1) 목적지 (원점이 아닌) 뷰 컨트롤러로 이동 하여 풀기 segue를 추가하십시오.
@IBAction func unwindToContact(_ unwindSegue: UIStoryboardSegue) {
//let sourceViewController = unwindSegue.source
// Use data from the view controller which initiated the unwind segue
}
2) CTRL을 뷰 컨트롤러 자체 에서 원점 뷰 컨트롤러의 종료 아이콘으로 드래그 합니다.
3) 몇 분 전에 방금 만든 해제 기능을 선택하십시오.
4) 풀기 segue를 선택하고 이름을 지정하십시오.
5) 원점 뷰 컨트롤러의 어느 곳으로 이동하여 unwind segue를 호출하십시오.
performSegue(withIdentifier: "unwindToContact", sender: self)
탐색이 복잡해지기 시작하면이 접근법이 많은 이점을 얻었습니다.
나는 이것이 누군가를 돕기를 바랍니다.