Swift 不使用segue展开到特定的视图控制器

Swift 不使用segue展开到特定的视图控制器,swift,uinavigationcontroller,unwind-segue,Swift,Uinavigationcontroller,Unwind Segue,当不使用情节串连板时,如何获得与展开序列相同的功能?假设我有一个导航控制器,其中包含多个视图控制器,我希望平滑地将其放回到某个控制器。如何实现这一点?您可以在UINavigationController上编写扩展来实现这一点。根据您的评论,您希望设置一个标识符,然后使用该特定标识符返回。为此,您可以编写一个简单的协议: protocol Unwindable { var identifier: String { get set } } 所有视图控制器都应确认此协议并设置标识符值。实现U

当不使用情节串连板时,如何获得与展开序列相同的功能?假设我有一个导航控制器,其中包含多个视图控制器,我希望平滑地将其放回到某个控制器。如何实现这一点?

您可以在UINavigationController上编写扩展来实现这一点。根据您的评论,您希望设置一个标识符,然后使用该特定标识符返回。为此,您可以编写一个简单的协议:

protocol Unwindable {
    var identifier: String { get set }
}
所有视图控制器都应确认此协议并设置标识符值。实现UINavigationController扩展,如:

extension UINavigationController {

    func goBackToInstance(withIdentifier identifier: String) {
        let mapped = self.viewControllers.compactMap{ $0 as? Unwindable }
        for vc in mapped.reversed() {
            if (vc.identifier == identifier) {
                self.popToViewController(vc as! UIViewController, animated: true)
            }
        }
    }
}
然后,您可以使用以下方法返回:

self.navigationController?.goBackToInstance(withIdentifier: "Your Identifier")

您可以使用
popToViewController
实现该功能。有没有一种语法上的糖衣方法可以做到这一点,而不必保留一堆控制器引用@MidhunMP?就像展开IBAction对故事板所做的那样。您可以在导航控制器上编写一个扩展,它将获取您必须展开的vc的类名,您可以从viewcontroller数组中找到该特定类的对象,并将其传递给上述方法进行展开。这是一个好主意@MidhunMP。更好的是,有没有一种方法可以在控制器上设置标识符,然后通过标识符从nav堆栈中获取控制器?这样,如果有多个相同的控制器类型,你可以去一个特定的。是的,你可以在下面检查我的答案。我添加了一个标识符以返回到特定的视图控制器