从另一个视图控制器swift 3

时间:2017-04-13 19:50:44

标签: ios swift segue viewcontroller dismiss

我的应用中有多个视图控制器。我想知道,有没有办法从第三个视图到家,但仍然不理会第三个观点?优选地,没有导航控制器。但如果我需要,请告诉我。谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

您需要实现自定义Segue,然后将它应用于两个视图之间的Segue。

以下是一个示例(当前视图将替换之前的视图):

class ReplaceSegue: UIStoryboardSegue {
    override func perform() {
        let sourceController: UIViewController = self.sourceViewController
        let destinationController: UIViewController = self.destinationViewController
        let navigationController = sourceController.navigationController!
        let controllerStack = NSMutableArray(array: navigationController.viewControllers)

        controllerStack.replaceObjectAtIndex(controllerStack.indexOfObject(sourceController), withObject:destinationController)

        navigationController.setViewControllers(controllerStack as NSArray as! [UIViewController], animated: true)
    }
}

答案 1 :(得分:0)

是的,这是可能的。在代码中尝试以下函数。 在您的家庭视图控制器中,输入一种欢迎/接收segue功能:

@IBAction func unwindToVC(segue: UIStoryboardSegue) {
    if let sourceViewController = segue.source as?       *Name of third view controller* {
        //in here you can now access any information you 
        //want to retrieve from the third view controller
      }
 }

//In your third viewController put the following:
//make sure you assign cancelSegue to a button or whatever

func cancelSegue() {
    performSegue(withIdentifier: "segueToMain", sender: self)
}

然后在你引用的第三个视图控制器的故事板中,右键单击从视图控制器顶部的黄色圆圈拖动到橙色方块“exit”,然后它将弹出一个名为unwindToVC的选项并单击它。确保它已被识别(正如你在cancelSegue中看到的那样,我的名字叫做segueToMain作为标识符。

现在当你在第三个视图控制器中时,你应该能够按下指定的按钮,它将执行segue

这对我有用,希望有所帮助