将数据从一个TabbarVC传递到另一个TabbarVC W / O丢失制表符

时间:2017-08-29 05:23:50

标签: ios swift uitabbarcontroller

我想将照片数据从Tabbarcontroller中的一个Viewcontroller(cameraVC)传递到同一个Tabbarcontroller 中的另一个Viewcontroller(mainVC),而不会在执行segue后丢失标签栏。

设置: * Tabbarcontroller

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

我必须能够在cameraVC中使用prepareForSegue和performSegue(这就是我将数据传递给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)
}

2 个答案:

答案 0 :(得分:0)

您正在错误地使用sender方法的performSegue(_:, 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)
}

答案 1 :(得分:0)

我解决问题的方法是在我的TabbarController中创建一个全局识别并用于将图像数据传递给mainVC的变量。对于我来说,这是避免创建重复视图的最可行的解决方案。