快速取消按钮到不同的控制器

时间:2018-11-27 16:37:31

标签: ios swift navigation

我正在用swift编写一个简单的应用程序,并且在接下来的时间里,我有两个控制器导致另一个控制器,当我单击“取消”按钮时,它始终会导致根控制器出现,不管我来自哪里。

我有第一个控制器(UIViewController),该控制器转到目标控制器的导航控制器(我想从中返回到正确调用的控制器)。

我有第二个控制器(UITableViewController),该控制器直接进入我的目标控制器。

这是我的“取消”按钮的代码:

// MARK: - Navigation
    @IBAction func lendingCancelButton(_ sender: UIBarButtonItem) {
        // Depending on style of presentation (modal or push presentation), this view controller needs to be dismissed in two different ways
        let isPresentingInAddLendingMode = presentingViewController is UINavigationController
        if isPresentingInAddLendingMode {
            dismiss(animated: true, completion: nil)
        } else if let owningNavigationController = navigationController {
            owningNavigationController.popViewController(animated: true)
        } else {
            fatalError("the LendingViewController is not inside a navigation controller.")
        }
    }

如果我正确理解了(如果我错了,可以纠正我,我会学到一些东西),它正在测试呈现我的目标ViewController的ViewController是否是NavigationController。

所以也许是这样,因为第二个控制器(我的UITableViewController)没有通过NavigationController,所以最后一个使用NavigationController调用我的目标视图的人总是UIViewController

请立即告诉我它是否不够清楚(我的帖子中“控制器”一词太多次)或是否需要其他代码。

2 个答案:

答案 0 :(得分:0)

尝试类似的方法

if let navigationController = presentingViewController as UINavigationController {
    navigationController.popViewController(animated: true)
} else if let viewController = presentingViewController as UIViewController {
    dismiss(animated: true, completion: nil)
} else {
    fatalError("the LendingViewController is not inside a navigation controller.")
}

如果我理解您想在找到dismiss时使用UIViewController,并在找到UINavigationController时弹出导航吗?

答案 1 :(得分:0)

好吧,所以我终于找到了使之工作的方法。

我的tableViewController嵌入到NavigationController中。我删除了它(因为根据需要我可以不用它)。从该视图控制器中,我绘制了一个“显示”目标视图的序列。 从我的另一个ViewController(该视图控制器嵌入到NavigationController中),我绘制了一个segue put,以模态形式显示了我的目标视图。

使用我最初的帖子中提供的代码,它可以正常工作。 我唯一不了解的是为什么TableViewController中的NavigationController可能导致其无法正常工作。