将数据从一个TabbarVC传递到另一个TabbarVC不带Tabbar

问题描述:

我希望将Tabbarcontroller中的一个ViewController(cameraVC)的照片数据传递到同一个Tabbarcontroller中的另一个Viewcontroller(mainVC),而不会丢失Tabbar Segue公司。将数据从一个TabbarVC传递到另一个TabbarVC不带Tabbar

设置: * Tabbarcontroller

 -Navbarcontroller 
     --mainVC (Tabbar Item) 
     --cameraVC (Tabbar Item) 

我必须能够使用prepareForSegue和performSegue在cameraVC(这是我想过去的数据交给mainVC)。

我已经试过W/O成功: Keeping tab bar on View after segue?Why TabBar hides after the segue?

当前实现:

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

    let destinationNavigationController = segue.destination as! UINavigationController 
    let targetController = destinationNavigationController.topViewController as! HomeVC 

    // if let homeVC = segue.destination as? HomeVC { 
     if let imageDict = sender as? Dictionary<String, Any> { 
      let imageData = imageDict["snapshotData"] 
      targetController.imageData = imageData as? Data 

     // } 
    } 
} 

@IBAction func sendBtnPressed(_ sender: Any) { 

    performSegue(withIdentifier: "goFeed", sender: ["snapshotData": photoData.removeValue(forKey: "photoData")]) 

    imageTaken.image = nil 
    self.view.insertSubview(previewView, aboveSubview: imageView) 
} 
+0

需要传递多少图片数据? – vaibhav

+0

一次只有一个图像 – Chris

+0

如果只有一个图像通过,那么您不需要将'Data'传递给下一个vc,只是将图像直接传递给下一个vc的类似对象。 – vaibhav

我解决了这个问题的方法是通过建立在我的TabbarController一个变量,它是全球公认和用于将图像数据传递给mainVC。这是我避免创建重复视图的最可行的解决方案。

您正在使用performSegue(_:, sender:)方法不正确的sender说法。它应该是视图控制器启动segue。它看起来像你的photoData属性属于启动segue的视图控制器,所以只需在prepareForSegue方法中直接访问它。因此,它应该是这样的:

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

    let destinationNavigationController = segue.destination as! UINavigationController 
    let targetController = destinationNavigationController.topViewController as! HomeVC 

    if let imageData: Data = self.photoData["photoData"] as? Data { 
     targetController.imageData = imageData 
    } 
} 

@IBAction func sendBtnPressed(_ sender: Any) { 

    performSegue(withIdentifier: "goFeed", sender: self) 

    imageTaken.image = nil 
    self.view.insertSubview(previewView, aboveSubview: imageView) 
} 
+0

考虑到我需要将数据传递给mainVC作为发布到我的数据库,这不起作用。它也没有帮助维护segue上的tabbar – Chris