web-dev-qa-db-ja.com

プログラム的にSwiftの前のViewControllerに戻る

ボタンクリックでユーザーをページに送ります。このページは UITableViewController です。

ユーザーがセルをタップしたら、前のページに戻ります。

私はself.performSegue("back")....のようなものについて考えましたが、これは悪い考えのようです。

それをする正しい方法は何ですか?

173
Christian

スイフト3:

前のView Controllerに戻りたい場合

_ = navigationController?.popViewController(animated: true)

ルートView Controllerに戻りたい場合

_ = navigationController?.popToRootViewController(animated: true)
451

スイフト3 スイフト4

if movetoroot { 
    navigationController?.popToRootViewController(animated: true)
} else {
    navigationController?.popViewController(animated: true)
}

1つがない場合があるため、navigationControllerはオプションです。

42
Vyacheslav

スイフト3

私は答えに遅れるかもしれませんが、Swift 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)
}
29
Fullpower

スイフト4

前のViewControllerに戻る/戻るには2つの方法があります。

  1. 最初のケース :使用した場合:self.navigationController?.pushViewController(yourViewController, animated: true)この場合self.navigationController?.popViewController(animated: true)を使用するには が必要です
  2. 2番目のケース :使用した場合:self.present(yourViewController, animated: true, completion: nil)この場合self.dismiss(animated: true, completion: nil)を使用するには が必要です

最初のケースでは、ストーリーボードのViewControllerをnavigationControllerに埋め込んだことを確認してください。

20
Braham Youssef

UIViewController内からUIViewControllerを提示した場合、つまり...

// Main View Controller
self.present(otherViewController, animated: true)

単にdismiss関数を呼び出すだけです。

// Other View Controller
self.dismiss(animated: true)
16
spencer.sm

Segueが「表示」または「プッシュ」の種類の場合は、UINavigationControllerのインスタンスで「popViewController(animated:Bool)」を呼び出すことができます。あるいはsegueが一種の "present"であれば、UIViewControllerのインスタンスで "dismiss(animated:Bool、completion:(() - > Void)?))と呼びます。

10
Pankaj

swift 3では、次のコードを書くだけでいいのです。

_ = navigationController?.popViewController(animated: true)
7
Amr Angry

Swift 5以上

ケース1:ナビゲーションコントローラとの併用

self.navigationController?.popViewController(animated: true)

ケース2:現在のView Controllerとの併用

self.dismiss(animated: true, completion: nil)
3
midhun p

これを試してみてください。前のビューではこれを使います。

navigationController?.popViewController(animated: true)  

ルートにポップこのコードを使用します。

navigationController?.popToRootViewController(animated: true) 
2
Ahsan

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のいずれかの後にビューを使用していました:)

1
Gabo MC

ストーリーボードのviewControllerをnavigationControllerに埋め込む方法に関する質問について:

  1. 別のviewControllerが配置されているストーリーボードを開きます
  2. ナビゲーションコントローラを起動したいviewControllerをタップします。
  3. Xcodeの上部にある「エディタ」をタップします
  4. - >埋め込むタップ
  5. →ナビゲーションコントローラをタップ