【问题标题】:Pass data to view controller [duplicate]将数据传递给视图控制器[重复]
【发布时间】:2019-12-26 23:34:13
【问题描述】:

我有一个带有 2 个按钮的屏幕,AB。当您按下按钮时,它们会转到相同的视图,并带有一个按钮 C。当按下 C 取决于 如果您按AB,它们会转到不同的视图。

我有这样的事情,但我有两个问题。首先,它不起作用,即使我将Button A 硬编码为mealTableViewController.from。其次,我不知道如何通过女巫按钮被按下到mealTableViewController.from

class HomeViewController: UITableViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard let mealTableViewController = segue.destination as? MealTableViewController else {
            return
        }
        mealTableViewController.from = "Button A"
    }
}

在附加到HomeViewController 的情节提要中有两个带有Show segue to Meal Table View Controller 的按钮

然后,我有MealTableViewController,有一个按钮连接到动作boton,根据from 的值,它会转换到一个屏幕或另一个屏幕。

class MealTableViewController: UITableViewController {
    var from: String?

    @IBAction func boton(_ sender: UIButton) {
        if from == "Button A" {
            performSegue(withIdentifier: "ShowMealView", sender: self)
        } else {
          performSegue(withIdentifier: "ShowOther", sender: self)
        }
    }


    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

【问题讨论】:

  • Segues 有标识符。在 Attributes Inspector 中,将 "buttonA" 分配给按钮 A 的 segue,并将 "buttonB" 分配给按钮 B。用if segue.identifier == "buttonA" { mealTableViewController.from = "Button A" } else if segue.identifier == "buttonB" { mealTableViewController.from = "Button B" }检查prepare(for:sender:)中的标识符
  • 您能解释一下您是如何将 HomeViewController 连接到情节提要中的 MealTableViewController 的吗?例如,您是否从按钮 A/B 按住 ctrl+拖动到 MealTableViewController?
  • Passing Data between View Controllers in Swift 和大量其他问题的可能重复

标签: ios swift


【解决方案1】:

我尝试重现此示例,它按预期工作。

按钮一个动作执行带有标识符Button A的segue

按钮 B 操作使用标识符 Button B 执行 segue

MealTableViewController 带有标识符 ShowMealViewShowOther(不是按钮 C)的 segues

故事板:

FirstViewController

class FirstViewController: UIViewController {

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

        guard let mealTableViewController = segue.destination as? MealTableViewController else {
            return
        }

        mealTableViewController.from = segue.identifier

    }

}

MealTableViewController

class MealTableViewController: UIViewController {

    var from: String?

    @IBAction func boton(_ sender: UIButton) {
        if from == "Button A" {
            performSegue(withIdentifier: "ShowMealView", sender: self)
        } else {
            performSegue(withIdentifier: "ShowOther", sender: self)
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

}

检查您的 segue 标识符及其附加到的位置:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    相关资源
    最近更新 更多