【问题标题】:Passing data between view controllers in Swift does not work在 Swift 中的视图控制器之间传递数据不起作用
【发布时间】:2018-07-03 19:45:27
【问题描述】:

你能帮帮我吗?即使下面的代码看起来正确,数据(itemStr)也没有传递,我已经在 stackoverflow.com 上检查了类似的问题:

第一个视图控制器(BookTableViewController.swift):

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
      if let SecondController = segue.destination as? BookViewController {
            SecondController.itemStr = "43"        
        }        
}

第二个视图控制器(BookViewController.swift):

var itemStr = String()

override func viewDidLoad() {
        super.viewDidLoad()

        itemNoLabel?.text = "BNo:" + itemStr + " GYE"       
}

当我运行程序时,itemStr 为 nil。我没有得到“43”?

在此先感谢您的热心帮助。 古文

【问题讨论】:

  • itemStr 不能是nil,它不是可选的。你的意思是它是空字符串吗?但是在viewDidLoadprepare 中的行上有一个断点,然后查看它们的调用时间。
  • 如果您尝试在SecondController.itemStr = "43" 的行中添加断点,它可以到达吗?另外,您确定itemStr 没有在您的代码中的某处设置为""
  • 亲爱的艾哈迈德,非常感谢您的及时回复。但这一次,itemNoLabel 显示的是默认标签的文本,而不是“BNo:”...?谢谢,Guven。
  • 没有。 itemStr 在代码中没有设置为“”。
  • "在第二个视图控制器之前有一个导航控制器" ...你的意思是你的 segue 从 BookTableViewController 转到 导航控制器 具有BookViewController 的根VC?或者你的转场是直接到BookViewController? (也许用故事板中相关控制器的屏幕截图编辑您的问题)

标签: ios swift view controllers


【解决方案1】:

您遇到了问题,因为您并没有真正呈现您认为的UIViewController。你真的在展示它是UINavigationViewController

但你仍然可以这样做:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
      if let navigationViewController = segue.destination as? UINavigationController {

            guard let secondViewController = navigationViewController.topViewController as? BookViewController else { return }
            secondViewController.itemStr = "43"        
        }        
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多