Swift 如何在视图控制器和选项卡栏之间传递数据';s使用segue查看控制器?

Swift 如何在视图控制器和选项卡栏之间传递数据';s使用segue查看控制器?,swift,swift5,Swift,Swift5,我还添加了设计的屏幕截图 我有一个单视图控制器和一个带有两个视图控制器B,C的选项卡 我想通过tabbar从VcA->VcB传递data变量的数据 我已将序列从submitbutton拖到选项卡栏 我试图通过segue传递数据 所以,请帮我解决这个问题 //In View controller A class ViewControllerA : UIViewController{ var data : String = "" @IBAction func submitButtonTap

我还添加了设计的屏幕截图

我有一个单视图控制器和一个带有两个视图控制器B,C的选项卡

我想通过tabbar从VcA->VcB传递
data
变量的数据

我已将序列从
submitbutton
拖到
选项卡栏

我试图通过segue传递数据

所以,请帮我解决这个问题

//In  View controller A
class ViewControllerA : UIViewController{
var data : String = ""
    @IBAction func submitButtonTapped(_ sender: Any) {   
    performSegue(withIdentifier: "homePage", sender: nil)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let vc = self.tabBarController!.viewControllers![0] as! ViewControllerB

     vc.containsData = data

    }

}

在选项卡栏的viewcontrollerB中,我刚刚在viewDidLoad()中打印了var“data”

查看代码,我发现了问题所在

首先,您需要使用
prepare(for segue
方法在使用segue呈现
viewControllerb
时传递数据。因此,在
viewControllerb
中,添加此方法并如下设置
viewControllerb
的数据

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if let tabController = segue.destination as? UITabBarController {
        let bController = tabController.children.first(where: { $0 is ViewControllerb })
        (bController as? ViewControllerb)?.containsData = self.stringTF.text!
    }
    super.prepare(for: segue, sender: sender)
}
第二,从
ViewController
中删除方法
submitbuttonapped
,因为您正在使用segue显示ViewControllerb,所以这不是必需的。还可以通过单击下图中的十字键删除脚本中的此方法出口


如果您正在使用NavigationController传递数据viewController->Tabcontroller。请尝试在按钮/tableviewCell/collectionViewCell单击/按上清除代码



我得到了答案

    @IBAction func submitButonTapped(_ sender: Any) {
            performSegue(withIdentifier: "homePage", sender: self)
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let barViewControllers = segue.destination as! UITabBarController
        let destinationViewController = barViewControllers.viewControllers![0] as! ViewControllerB
        destinationViewController.containsData = Data
    }

我希望数据来自不同的ViewController。到Tabbar的ViewController…..这可能有助于在您正在打印的Tabbaras中的ViewController之间传递数据
print(vcA.data)
我无法打印我已经显示了我尝试的代码,在打开可选值时,设计的屏幕截图意外地发现为零。我收到了错误我认为您有多个问题。如果您可以与问题共享示例项目,这样可以节省时间来解决问题e、 我在GitHub中有一个很好的例子,你可以修复它。请始终尝试包含所有相关的代码来重现问题,以获得更好的帮助。
let navController = self.Your_TABBAR_CONTROLLER.viewControllers![Tab_Index] as! UINavigationController
let vc = navController.topViewController as! Your_View_Controller
vc.name = Data
let navController = self.tabBarController.viewControllers![1] as! UINavigationController
let vc = navController.topViewController as! HomeViewController
vc.name= self.name
    @IBAction func submitButonTapped(_ sender: Any) {
            performSegue(withIdentifier: "homePage", sender: self)
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let barViewControllers = segue.destination as! UITabBarController
        let destinationViewController = barViewControllers.viewControllers![0] as! ViewControllerB
        destinationViewController.containsData = Data
    }