【问题标题】:Programmatically return to an earlier UIViewController in Swift在 Swift 中以编程方式返回到早期的 UIViewController
【发布时间】:2020-10-01 18:29:58
【问题描述】:

我的 iOS 应用程序(Xcode 11.5)有一个视图控制器(FirstViewController 类的一个实例),它呈现一个 UINavigationController。 UINavigationController 推送两个视图控制器(SecondViewController 和 ThirdViewController 类的实例)。 ThirdViewController 有一个 UIButton 成功将我带回 FirstViewController:

    @objc func buttonPressed(_ sender: UIButton) {
        assert(navigationController?.viewControllers.count == 2);
        performSegue(withIdentifier: "backToFirstViewController", sender: sender);
    }

我使用 Interface Builder 创建了这个 segue。有没有一种方法可以让我完全在 Swift 中返回 FirstViewController,而不必使用使用 Interface Builder 创建的 segue?提前谢谢你。

【问题讨论】:

    标签: ios swift uiviewcontroller segue


    【解决方案1】:

    您可以在没有情节提要的情况下以编程方式完成。

    @objc func buttonPressed(_ sender: UIButton) {
         navigationController?.popToRootViewController(animated: true)
    }
    

    【讨论】:

    • 谢谢,但这不是我想做的。我想一直回到 FirstViewController,而不是 SecondViewController。
    • 在这种情况下,请尝试拨打dismiss(animated: true)。
    【解决方案2】:

    你可以试试这样的:

    extension UINavigationController {
    
        func goBackTo<TargetViewController:UIViewController>(targetViewController:TargetViewController.Type) {
            let allViewController: [UIViewController] = self.viewControllers as [UIViewController]
            for aviewcontroller : UIViewController in allViewController {
                if aviewcontroller.isKind(of: targetViewController) {
                    self.popToViewController(aviewcontroller, animated: true)
                    break
                }
            }
        }
    }
    

    你应该可以称它为:

       self.navigationController!.goBackTo(targetViewController: MyViewController.self)
    

    【讨论】:

    • 感谢您的巧妙代码,但恐怕我并不清楚我的情况。我要返回的 FirstViewController 不是 UINavigationController 的 viewControllers 属性中的两个 UIViewController 之一。 FirstViewController 在 UINavigationController 之前被实例化。我在我的代码中添加了一个断言,以强调只有 SecondViewController 和 ThirdViewController 在此属性中。
    猜你喜欢
    • 2015-04-29
    • 2015-01-24
    • 2015-07-27
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多