【问题标题】:Can't pass values in UIStoryBoard segue [duplicate]无法在 UIStoryBoard segue 中传递值 [重复]
【发布时间】:2018-09-21 10:10:19
【问题描述】:

我需要根据某些条件将 bool 值发送到 Second viewController。 但在 Second ViewController 中,布尔变量的值始终为 false。 这是第一个 ViewController 代码:

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}
@IBAction func moveTo(_ sender: Any) {
    self.performSegue(withIdentifier: "Move2", sender: self)

}
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    if segue.identifier == "Move2"
    {
        let secondVC = segue.destination as? SecondViewController
        secondVC?.second = true

    }
}
  override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
  }
}

SecondViewController 代码是

import UIKit

class SecondViewController: UIViewController {
var second = Bool()

override func viewDidLoad() {
    super.viewDidLoad()
    print(second)
    // Do any additional setup after loading the view.
}

但是第二个变量的这个值是假的。

我的代码有什么问题。需要帮忙。 TIA..

编辑:在两个 ViewController 我都有导航控制器。那是问题。 SecondVC 是 SecondViewController 的导航控制器,所以我不能向 secondVC 传递数据。

【问题讨论】:

  • 您是否在 Storyboard 中设置了 segue 标识符?单击 segue 箭头并在识别检查器中将 segue 标识符设置为 Move2
  • 确保您的SecondViewControllerclass 已在情节提要中设置。
  • ya.. 设置为“Move2”
  • secondVC?.second = true 行保留一个断点。并且调试是编译器在这里停止。
  • 更改second = Bool() to second: Bool = false

标签: ios swift segue uistoryboard uistoryboardsegue


【解决方案1】:

转到您的 Storyboard 并选择 SecondViewController(左上角的黄色圆圈。转到身份检查器并从 Class 下拉菜单中选择 SecondViewController。

见下图:

【讨论】:

  • 在两个视图控制器中都包含导航控制器。我在第二个 VC 中删除了导航控制器。现在它工作正常.. 是这个问题吗?
  • 如果 SecondViewController 嵌入到导航控制器中,则会导致问题。通常,您的 First VC 是嵌入的,仅此而已。
【解决方案2】:

保持简单干净:

第一VC:

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
        if segue.identifier == "Move2"
        {
            let secondVC = segue.destination as? SecondViewController
            secondVC.second = true

        }
    } 

第二个VC:

class SecondViewController: UIViewController {
    var second: Bool = false

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

我自己对此进行了测试。 true 被打印出来。

【讨论】:

  • secondVC?.second = true - 可选
  • if let secondVC = ... 怎么样,secondVC 是可选的。
  • @Scriptable :我认为不需要可选。
  • let secondVC = segue.destination as? SecondViewController 作为?创建可选
  • 您可以将as? 更改为as!,这是一个完全有效的编码决策。如果您没有将 segue 连接到正确的 VC 类型,您会希望它崩溃。
猜你喜欢
  • 2019-10-07
  • 2012-03-11
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多