ios – 如何通过点击取消按钮显示两个ViewControllers中的一个?

通过在导航栏上按加号,我可以点击TabBarItem或从表视图控制器B点击一个ViewController.

我的问题

如何通过单击ViewController上的“取消”按钮,如果通过单击加号从表视图控制器B点击ViewController,可以转到表视图控制器B,或者如果我通过选择第二个来到ViewController,则转到表视图控制器A.蓝色)标签栏项目?

我想在ViewController上设置两个动作取消按钮 – 取决于我想要转到TableViewControllerA或TableViewControllerB的前一个控制器,是否可能?

细节

过渡的第一个版本:
通过单击TableViewControllerB上的加号按钮,我转到ViewController,然后在ViewController上单击取消按钮并返回到TableViewControllerB.

过渡的第二个版本:
通过单击TabBar控制器上的第二个TabBarItem,我转到ViewController,然后在ViewController上单击“取消”按钮并返回到TableViewControllerA.

《ios – 如何通过点击取消按钮显示两个ViewControllers中的一个?》

最佳答案 根据您的视图控制器流程图,有两种方法可以实现,您想要什么.

>弹出到根视图控制器
>弹出到特定视图控制器(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)
                    })
                     */
                }


            }
        }
}
点赞