如何弹回TableViewController

时间:2017-10-20 03:53:35

标签: ios swift uinavigationcontroller tableview pop

我从public class TransportDelegator { public void send(Message msg) throws MessagingException { Transport.send(msg) } } 开始,其中包含一个名称列表。

当用户点击名称时,它们将被视为视图控制器。

tableViewController中,用户可以按下一个按钮,将其带到另一个表视图控制器。

布局如下: TableViewController(1) - > ViewController - > TableViewController(2)

我的问题是,如何从第二个TableViewController弹回第一个viewController

我的TableViewController是我的signIn View控制器,所以我无法弹回root。

2 个答案:

答案 0 :(得分:2)

您可以将其设置为弹出rootViewController

self.navigationController?.popToRootViewController(animated: true)

<强>更新
由于您的rootViewController不是您想要结束的地方,因此您可以遍历controllers并弹出特定的一个:

for controller in self.navigationController!.viewControllers {
    if controller.isKind(of: TableViewControllerOne.self) { 
        self.navigationController!.popToViewController(controller, animated: true)
        break
    }
}

而不是TableViewControllerOne.self更新到您想要的controller

答案 1 :(得分:0)

如果您熟悉segues,则可以实现展开segue。如果需要,这将为您提供将信息传递回TableViewController(1)的额外好处。要在TableViewController1中使用,您需要添加一些看起来像的代码:

@IBAction func unwind(fromTableVC2 segue: UIStoryboardSegue) {
    if (segue.source is TableVC2) {
        if let svc = segue.source as? TableVC2 {
             // pass information back
        }
    }
}

然后在您的故事板中,您将转到您拥有TableVC2的位置并将黄色VC圆圈拖到出口并选择我们在上面创建的功能。将segue命名(对于此示例,我们将其称为&#34; UnwindToTableVC1&#34;),然后在TableVC2中的某处添加代码:

func setVariableToPassBack () {
    // Set up variables you want to pass back
    performSegue(withIdentifier: "UnwindToTableVC1", sender: self)    }

这将带您回到您选择的目的地,并提供您希望传回的任何信息。

如果您不想传回任何内容,您只需要在TableVC2中调用以下行:

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