将数据从一个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)
}
我解决了这个问题的方法是通过建立在我的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)
}
考虑到我需要将数据传递给mainVC作为发布到我的数据库,这不起作用。它也没有帮助维护segue上的tabbar – Chris
需要传递多少图片数据? – vaibhav
一次只有一个图像 – Chris
如果只有一个图像通过,那么您不需要将'Data'传递给下一个vc,只是将图像直接传递给下一个vc的类似对象。 – vaibhav