将变量传递给下一个视图控制器

Posted

技术标签:

【中文标题】将变量传递给下一个视图控制器【英文标题】:Pass variable to next View Controller 【发布时间】:2017-08-20 08:57:25 【问题描述】:

我想将变量从一个视图控制器传递到另一个视图控制器。 第一个视图控制器看起来像这样,segue 被正确触发并显示新的视图控制器。

@IBAction func testButton(_ sender: Any) 

    let timerVC = TimerViewController()

    timerVC.secondsPassed = textfield_seconds.text!

    navigationController?.pushViewController(timerVC, animated: true)


在下一个视图控制器(TimerViewController)上,我在类头中声明了一个变量

var secondsPassed:String!

在 viewDidLoad 中,我只想将值打印到控制台,而我收到的只是“nil”。

我浏览了各种教程,但似乎没有找到正确的答案来让它发挥作用。

有人知道线索吗?

提前谢谢...

【问题讨论】:

你有连接到按钮的segue吗?在那种情况下,我认为 IBAction 不会实际运行。您应该删除 segue,因为您已经在调用 pushViewController 是的,有一个 segue 连接。我删除了它,但现在什么也没有发生。没有显示新的视图控制器,只有按钮指示它已被按下。我仍然很困惑。这么简单的事情怎么会这么难呢o_O? 啊,那你没有嵌入 UINavigationController,对吧?立即发布答案。 不,我没有 UINavigationController。标记我的故事板并通过菜单将它们嵌入到故事板中是否有意义?这能解决我的问题吗? 你可以1。未嵌入导航控制器并使用我的答案或 2. 嵌入导航控制器并删除 segue。这些都可以解决您的问题。 【参考方案1】:

如果您已经在使用 segue,则可以删除显示控制器的这一行(无论如何,您似乎没有 navigationController):

navigationController?.pushViewController(timerVC, animated: true)

现在使用 segues 将数据传递给另一个 VC 的正确方法是:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if let vc = segue.destination as? TimerViewController 
        vc.secondsPassed = textfield_seconds.text!
    

【讨论】:

以上是关于将变量传递给下一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量传递给下一个视图?

将信息传递给目标 c 的当前视图控制器下的视图控制器

将数据从控制器传递到另一个视图并在 sencha touch 中设置标签的值

将变量从页面视图控制器传递到另一个

将一个变量从一个视图控制器传递到另一个视图控制器

通过后退按钮将变量传递给其他视图控制器