我正在用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
。
请立即告诉我它是否不够清楚(我的帖子中“控制器”一词太多次)或是否需要其他代码。
答案 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可能导致其无法正常工作。