【发布时间】:2022-01-14 06:04:52
【问题描述】:
上面我有一个带有 4 个按钮的 TabBarController。当我按下第二个 TabBarItem(Cars) 或 第三个 TabBarItem(Bicycles) 时,我想从第一个TabBarItem(HomeScreen) 传递一些值。
我正在使用 Swift 5,但我的主要项目中没有 SceneDelegate(是一个 3 年的项目),我只有 AppDelegate,这就是为什么我无法尝试唯一的例子我从 Stackoverflow 中发现了一个类似我的问题。
我设法以某种方式在ViewControllers 到TabBarController 之间传递数据,但我认为不再是正确的方法(因为该社区的一些人也在某些线程上这么说)因为当我点击不同的TabBarItems数据丢失,之后再次出现,但值错误等。
我将在下面附上一个 GIF,其中包含我在导航时遇到的错误以及我当前的代码以及指向 GitHub 上的 DEMO 项目的链接 (https://github.com/florentin89/PassDataTabBarController/)
你能帮我使用正确的实现来传递数据吗?
这是我的 HomeScreen 代码ViewController:
import UIKit
class HomeViewController: UIViewController {
@IBOutlet var textfieldHoldingCarsValue: UITextField!
@IBOutlet var textfieldHoldingBicyclesValue: UITextField!
var valueForCarsScreen = String()
var valueForBicyclesScreen = String()
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillDisappear(_ animated: Bool) {
valueForCarsScreen = textfieldHoldingCarsValue.text ?? String()
valueForBicyclesScreen = textfieldHoldingBicyclesValue.text ?? String()
if let navController = self.tabBarController?.viewControllers?[1] as? UINavigationController{
if let carsTab = navController.children.first as? PostcodeViewController{
carsTab.receivedValueFromHomeScreen = valueForCarsScreen
}
}
if let navController = self.tabBarController?.viewControllers?[2] as? UINavigationController{
if let bicyclesTab = navController.children.first as? PostcodeViewController{
bicyclesTab.receivedValueFromHomeScreen = valueForBicyclesScreen
}
}
}
// Logout the user and navigate to Login screen
@IBAction func logoutTapped(_ sender: UIBarButtonItem) {
self.view.window?.rootViewController?.dismiss(animated: true, completion: nil)
}
}
这是我用于第二个和第三个TabBarItem 的ViewController 的代码:
import UIKit
class PostcodeViewController: UIViewController {
@IBOutlet var receivedValueLabel: UILabel!
var receivedValueFromHomeScreen = String()
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
if self.tabBarController?.selectedIndex == 1 {
receivedValueLabel.text = "Value received for Cars: \n" + receivedValueFromHomeScreen
}
if self.tabBarController?.selectedIndex == 2 {
receivedValueLabel.text = "Value received for Bicycles: \n" + receivedValueFromHomeScreen
}
}
}
这是我在ViewControllers 之间导航时遇到的错误/故障的 GIF:
感谢您阅读本文!
【问题讨论】: