我只需点击TabBarItem就可以点击一个ViewController,或者在导航栏上按加号从表视图控制器B点击。
我的问题
如果通过单击ViewController上的“取消”按钮,我可以转到表视图控制器B,如果我通过单击加号从表视图控制器B点击ViewController,或者如果我通过选择点击ViewController来转到表视图控制器A第二个(蓝色)标签栏项目?
我想在ViewController上设置两个动作取消按钮 - 取决于我想要转到TableViewControllerA或TableViewControllerB的前一个控制器,是否可能?
详情
过渡的第一个版本: 通过单击TableViewControllerB上的Plus按钮,我转到ViewController,然后在ViewController上单击Cancel按钮并返回TableViewControllerB。
过渡的第二个版本: 通过单击TabBar控制器上的第二个TabBarItem,我转到ViewController,然后在ViewController上单击“取消”按钮并返回到TableViewControllerA。
答案 0 :(得分:1)
根据您的视图控制器流程图,有两种方法可以实现,您想要什么。
您需要根据自己的要求决定使用哪些选项。
在取消按钮中添加/替换以下代码,然后依次尝试这两个选项:
@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)
})
*/
}
}
}
}