准备(为 segue :) 没有被调用

Posted

技术标签:

【中文标题】准备(为 segue :) 没有被调用【英文标题】:prepare(for segue:) not getting called 【发布时间】:2018-09-21 19:31:12 【问题描述】:

我查看了相关帖子,但我不明白为什么我的 ViewController 中没有调用它。

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

    print("prepare in Start got triggered")

    if segue.destination is RegistrationViewController 

        let newVC = sender as? RegistrationViewController
        newVC?.testString = "Mission accomplished, passed this data"
    


我通过按下按钮调用它

performSegue(withIdentifier: "RegistrationFromStart", sender: self)

testString 是 RegistrationViewController 中的一个属性 segue 发生了,没问题,但是属性永远不会改变,prepare 永远不会触发打印命令。

我在RegistrationViewController的viewDidLoad中打印testString

  print("RegistrationViewController testString \(testString)")

提前感谢您的帮助。

【问题讨论】:

故事板中的segue连接是怎么做的?是来自 ViewController 还是来自按钮? 【参考方案1】:

就是这样

let newVC = sender as? RegistrationViewController
newVC?.testString = "Mission accomplished, passed this data"

无效

因为sender 不能转换为RegistrationViewController

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

  if let des = segue.destination as? RegistrationViewController 
      des.testString = "Mission accomplished, passed this data"
  


您的 segue 连接来源应该是 VC 本身,而不是来自任何操作,并且在 IBAction 中,例如设置

performSegue(withIdentifier: "RegistrationFromStart", sender:nil)

【讨论】:

这一切都很好,但它没有解释为什么print("prepare in Start got triggered") 不打印,这就是问题所要问的。 遵循正确的事情会使其对他有效,不一定是答案和问题的明确直接原因 好的,我认为你是对的,他只是问的问题很糟糕。【参考方案2】:

谢谢大家。感谢您指出这一点。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    print("prepare in Start got triggered")

    if segue.destination is RegistrationViewController 

        let newVC = segue.destination as? RegistrationViewController
        newVC?.testString = "Mission accomplished, passed this data"
    


也就是说,它从不触发 print 语句,但它确实传递了数据,这就是重点。 根据您的观点,是的,我是从 IBAction 调用它

 @IBAction func startKiosk(_ sender: Any) 
    clickSound?.play()
    performSegue(withIdentifier: "RegistrationFromStart", sender: self)
 

【讨论】:

以上是关于准备(为 segue :) 没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

为 segue 做准备没有按预期工作

准备(用于 segue:UIStoryboardSegue,发件人:任何?)在 iOS 11 上的 Xcode 9 b6 中未调用

为 segue 做准备,传递数据

使用 Sender 为 Swift 中的 Segue 做准备

在 Swift 中为嵌入式 tableView 中的 segue 做准备

Swift Prepare(for: segue) 未调用