我将用户发送到一个页面上的按钮点击。这个页面是一个UITableViewController。

现在如果用户点击一个单元格,我想把他推回到上一页。

我想到了self.performSegue("back")....但这似乎不是一个好主意。

正确的做法是什么?


当前回答

如果你想关闭前两个视图控制器,只需像这样调用popViewController两次:

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

其他回答

如果你想关闭前两个视图控制器,只需像这样调用popViewController两次:

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

试试这个: 对于前面的视图使用这个:

navigationController?.popViewController(animated: true)  

弹出到根目录使用以下代码:

navigationController?.popToRootViewController(animated: true) 

斯威夫特4

有两种方法返回/返回之前的ViewController:

第一种情况:如果你使用:self.navigationController?。pushViewController(yourViewController, animated: true) 在这种情况下,你需要使用self.navigationController?会被(动画:真) 第二种情况:如果你使用:self。present(yourViewController, animated: true, completion: nil) 在这种情况下,您需要使用self。解散(动画:true,完成:nil)

在第一种情况下,确保你在故事板中嵌入了ViewController到navigationController

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之后使用了一个视图:)

我想建议解决这个问题的另一种方法。与其使用导航控制器弹出视图控制器,不如使用unwind segue。这个解决方案有一些非常重要的优点:

原点控制器可以回到任何其他目标控制器(不仅仅是前一个),而不需要知道任何关于目标的信息。 Push和pop segue是在storyboard中定义的,所以在你的视图控制器中没有导航代码。

你可以在Unwind segue一步一步中找到更多细节。如何在前一个链接中有更好的解释,包括如何发回数据,但在这里我将做一个简单的解释。

1)转到目标视图控制器(不是源视图控制器)并添加一个unwind segue:

    @IBAction func unwindToContact(_ unwindSegue: UIStoryboardSegue) {
        //let sourceViewController = unwindSegue.source
        // Use data from the view controller which initiated the unwind segue
    }

2)从视图控制器本身按CTRL拖动到原点视图控制器的退出图标:

3)选择刚才创建的unwind函数:

4)选择unwind segue并给它一个名字:

5)到原点视图控制器的任意位置,调用unwind segue:

performSegue(withIdentifier: "unwindToContact", sender: self)

我发现当你的导航开始变得复杂时,这种方法会带来很多好处。

我希望这能帮助到一些人。