通过在导航栏上按加号,我可以点击TabBarItem或从表视图控制器B点击一个ViewController.
我的问题
如何通过单击ViewController上的“取消”按钮,如果通过单击加号从表视图控制器B点击ViewController,可以转到表视图控制器B,或者如果我通过选择第二个来到ViewController,则转到表视图控制器A.蓝色)标签栏项目?
我想在ViewController上设置两个动作取消按钮 – 取决于我想要转到TableViewControllerA或TableViewControllerB的前一个控制器,是否可能?
细节
过渡的第一个版本:
通过单击TableViewControllerB上的加号按钮,我转到ViewController,然后在ViewController上单击取消按钮并返回到TableViewControllerB.
过渡的第二个版本:
通过单击TabBar控制器上的第二个TabBarItem,我转到ViewController,然后在ViewController上单击“取消”按钮并返回到TableViewControllerA.
最佳答案 根据您的视图控制器流程图,有两种方法可以实现,您想要什么.
>弹出到根视图控制器
>弹出到特定视图控制器(TableViewController A)
您需要根据您的要求决定使用哪些选项.
在取消按钮中添加/替换以下代码并逐个尝试这两个选项:
@IBAction btnCancel_Action(button: UIButton) {
// 1. Pop to root view controller
self.navigationController?.popToRootViewController(animated: true)
// OR
// 2. Pop to Specific view controller (TableViewController A)
if let navController = self.navigationController {
for viewcontroller in navController.viewControllers {
// `TableViewControllerA` class name for view controller or you can use instance of `TableViewControllerA` also with `viewcontroller == <TableViewControllerA>`
if viewcontroller is <TableViewControllerA> {
//if viewcontroller == <IntanceOfTableViewControllerA> {
self.navigationController?.popToViewController(viewcontroller, animated: true)
break
}
}
}
}
编辑答案根据问题编辑:试试这个
@IBAction btnCancel_Action(button: UIButton) {
if let tabController = self.tabBarController {
if tabController.selectedIndex == 0 {
self.navigationController?.popViewController(animated: true)
} else if tabController.selectedIndex == 1 {
self.tabBarController?.selectedIndex = 0
// If your tabbar 0 has TableViewControllerB is active on screen then use following code
if let navController = self.tabBarController?.navigationController {
navController.popToRootViewController(animated: false)
/*
//or
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
navController.popToRootViewController(animated: false)
})
*/
}
}
}
}