Подтвердить что ты не робот

Программно вернуться к предыдущему ViewController в Swift

Я отправляю пользователя на страницу одним нажатием кнопки. Эта страница является UITableViewController.

Теперь, если пользователь нажимает на ячейку, я хотел бы вернуть его на предыдущую страницу.

Я думал о чем-то вроде self.performSegue("back")...., но это, кажется, плохая идея.

Каков правильный способ сделать это?

4b9b3361

Ответ 1

Swift 3:

Если вы хотите вернуться к предыдущему контроллеру представления

_ = navigationController?.popViewController(animated: true)

Если вы хотите вернуться к контроллеру корневого представления

_ = navigationController?.popToRootViewController(animated: true)

Ответ 2

Swift 3, Swift 4

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

navigationController необязателен, потому что может быть не один.

Ответ 3

Swift 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)
}

Ответ 4

Swift 4

Есть два способа вернуться/вернуться к предыдущему ViewController:

  1. Первый случай: если вы использовали: self.navigationController?.pushViewController(yourViewController, animated: true) в этом случае вам нужно использовать self.navigationController?.popViewController(animated: true)
  2. Второй случай: если вы использовали: self.present(yourViewController, animated: true, completion: nil) в этом случае вам нужно использовать self.dismiss(animated: true, completion: nil)

В первом случае убедитесь, что вы встроили свой ViewController в навигационный контроллер в вашей раскадровке

Ответ 5

В случае, когда вы представили UIViewController из UIViewController т.е.

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

Просто вызовите функцию dismiss:

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

Ответ 6

Свифт 5 и выше

вариант 1: использование с контроллером навигации

self.navigationController?.popViewController(animated: true)

Случай 2: использование с настоящим контроллером представления

self.dismiss(animated: true, completion: nil)

Ответ 7

Если Segue является "Show" или "Push", вы можете вызвать "popViewController (animated: Bool)" в экземпляре UINavigationController. Или если segue является своего рода "настоящим", тогда вызывается "увольнять (анимированный: Bool, завершение: (() → Void)?)" С экземпляром UIViewController

Ответ 8

для быстрого 3 вам просто нужно написать следующую строку кода

_ = navigationController?.popViewController(animated: true)

Ответ 9

Попробуйте это: для предыдущего просмотра используйте это:

navigationController?.popViewController(animated: true)  

поп в корень используйте этот код:

navigationController?.popToRootViewController(animated: true) 

Ответ 10

Swift 4.0 Xcode 10.0 с TabViewController в качестве последнего представления

Если ваш последний ViewController встроен в TabViewController, приведенный ниже код отправит вас в корень...

navigationController?.popToRootViewController(animated: true)
navigationController?.popViewController(animated: true)

Но если вы действительно хотите вернуться к последнему представлению (это может быть представление Tab1, Tab2 или Tab3...), вы должны написать следующий код:

_ = self.navigationController?.popViewController(animated: true)

Это работает для меня, я использовал представление после одного из моего TabView :)

Ответ 11

Для вопросов, касающихся того, как встроить ваш viewController в navigationController в раскадровке:

  1. Откройте раскадровку, на которой расположен ваш другой viewController
  2. Нажмите на viewController, с которого вы хотите запустить свой контроллер навигации
  3. В верхней части Xcode, нажмите "Редактор"
  4. → Нажмите встраивать в
  5. → Нажмите "Контроллер навигации

Ответ 12

Это работает для меня (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

Я могу перенаправить на корневую страницу, написав код в "viewDidDisappear" навигационного контроллера,

override func viewDidDisappear(_ animated: Bool) { self.navigationController?.popToRootViewController(animated: true) }