将变量传递给下一个视图控制器
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!
【讨论】:
以上是关于将变量传递给下一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章