【问题标题】:How to pass data to another ViewController without using a button in swift如何在不使用 swift 按钮的情况下将数据传递给另一个 ViewController
【发布时间】:2016-05-07 23:59:04
【问题描述】:

我目前有这个 Swift 代码,它不会将存储在 score 中的 int 值传递到 currentScorehigherScorehighScorecurrentScorehighScore 都在 GameOverViewController 上实例化。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "GameOverVC" {
        let svc: GameOverViewController = segue.destinationViewController as! GameOverViewController
        score = svc.currentScore
        higherScore = svc.highScore
    }
}

我目前正在使用情节提要推送到下一个视图。这是推送代码。

if let resultController = self.storyboard?.instantiateViewControllerWithIdentifier("GameOverVC") as? GameOverViewController {
    self.presentViewController(resultController, animated: true, completion: nil)
}

所有代码都可以正常编译,所以我需要有一个实际的UIButton 还是我需要在方法或GameOverViewCotroller 中添加其他内容?

【问题讨论】:

    标签: ios swift uiviewcontroller segue uistoryboardsegue


    【解决方案1】:

    你的赋值方法不对……

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "GameOverVC" {
            let svc: GameOverViewController = segue.destinationViewController as! GameOverViewController
            svc.currentScore = score //pass self.score to svc.currentScore
            svc.highScore = higherScore //pass self.higherScore to svc.currentScore
        }
    }
    

    【讨论】:

    • 我改变了它,它仍然没有通过任何东西。任何建议都可能与我使用故事板 ID 时的 segue 标识符有关。
    • 调用是否正确?只需在该行下方打印 svc.currentScore 和 svc.highScore 相同
    • 您是否在 2 个 vc 之间正确应用了 segue?检查所有值是否为零,并在 GameOverViewController 的 viewdidload 和 prepareForSegue 中打印 currentScore
    • 刚刚检查它没有打印任何东西,所以它一定不会被调用。
    • 那么您是否访问了此代码或编译器未输入代码?
    【解决方案2】:

    你可以通过 2 种方法触发你的 segue

    将一个按钮拖到您的 segue 并在界面生成器中以这种方式触发它

    或者在你的视图控制器中你可以调用

    self.performSegueWithIdentifier("GameOverVC", sender: self)
    

    【讨论】:

      【解决方案3】:

      如果你想传递一个图像来做这样的事情- 在 prepareForSegue 中,您无法访问目标视图控制器的 @IBOutlets,因为它们尚未设置。您应该将图像分配给目标视图控制器的属性,然后将其移动到 viewDidLoad 中:

      在源视图控制器中:

      override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

      if segue.identifier == "toBrowsePage" {
          let dvc = segue.destinationViewController as! ListPage
          dvc.myImage = postingImage.image
      }
      

      } 在目标视图控制器中:

      类 ListPage: UIViewController { @IBOutlet 弱变量浏览图像:UIImageView! var myImage: UIImage!

      override func viewDidLoad() {
          super.viewDidLoad()
          browsingImage.image = myImage
      }
      

      }

      【讨论】:

        【解决方案4】:

        只需还原并尝试您没有正确分配值

         score = svc.currentScore
         higherScore = svc.highScore
        

          svc.currentScore = score 
          svc.highScore = higherScore
        

        【讨论】:

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