我想将照片数据从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)
}
答案 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的变量。对于我来说,这是避免创建重复视图的最可行的解决方案。