gpt4 book ai didi

ios - 将数据从第一个 VC 传递到第三个 (Swift)

转载 作者:行者123 更新时间:2023-11-30 12:03:20 25 4
gpt4 key购买 nike

我有 3 个 viewController,我以这种方式将数据从第一个 View Controller 传递到第二个 View Controller (这是第一个 VC)

 var steppers : UIStepper?

@IBOutlet weak var hourLabel: UILabel!
@IBOutlet weak var stepper: UIStepper!

@IBAction func stepper(_ sender: UIStepper) {

hourLabel.text = String(sender.value)
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let nc = segue.destination as? SelectClass {
nc.limit = Int(stepper.value)
} }

在第二个 VC 中,我有 var limit = 0。到目前为止,一切正常,但我想做的是将用户提供给步进器的值传递给第三个 VC。我尝试在第三个 VC 中创建另一个变量 var limit2 = 0 并以这种方式将数据从第二个 VC 传递到第三个

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? ThirdClass {
vc.limit2 = limit
} }

但没有结果,我的 var limit2 = 0 它始终具有值 0,而不是采用我用步进器添加的值。我该怎么办?

这是第二个VC中的准备

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

if segue.identifier == nearbySearchSegueIdentifier {
guard let category = sender as? QCategoryy else {
return
}
if let selectedRows = tableView.indexPathsForSelectedRows {

if let vc = segue.destination as? ThirdClass {
vc.category = category
vc.limit2 = limit
}
}
}
}

最佳答案

考虑到您当前的代码,有可能 limit2 未设置,因为此条件无效:

// This condition could be failing sometimes
if let selectedRows = tableView.indexPathsForSelectedRows {
if let vc = segue.destination as? ThirdClass {
vc.category = category
vc.limit2 = limit
}
}

根据DocumentationindexPathsForSelectedRows返回一个可选值,并且在您的segue中,只有当该值不为零时您才设置limit2

尝试在任何条件之外设置 limit2,这样它将始终执行,并且如果您需要满足条件才能执行segue,检查shouldPerformSegue(withIdentifier:sender:) here

此外,如果 VC3 上所需的值与离开 VC1 时所需的值相同,则可以使用不同的方法在它们之间传递数据,而不必依赖 VC2。

一种可能是在 VC1 中创建一个静态变量,并在推送到 VC2 之前设置限制值:

var steppers : UIStepper?

@IBOutlet weak var hourLabel: UILabel!
@IBOutlet weak var stepper: UIStepper!

// ADD THIS
static var globalLimit: Int = 0

@IBAction func stepper(_ sender: UIStepper) {
hourLabel.text = String(sender.value)
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let nc = segue.destination as? SelectClass {
nc.limit = Int(stepper.value)
// AND THIS
VC1ClassName.globalLimit = Int(stepper.value)
}
}

然后在 VC3 内部随时加载您的全局值(可能是 viewDidLoad):

override func viewDidLoad() {
super.viewDidLoad()
limit2 = VC1ClassName.globalLimit
}

您还可以创建一个 StepperManager 类或类似的类来负责管理数据,而不是通过 ViewController 传递数据,并且您可以随时从所需的每个类访问它.

关于ios - 将数据从第一个 VC 传递到第三个 (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46949829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com