相同的视图控制器加载两次

时间:2017-09-02 21:06:54

标签: ios swift segue viewcontroller viewdidload

我已就此问题阅读了几篇帖子,但没有一篇能解决我的问题。

我正在编写应用程序,我必须点击按钮("准备")才能转到以下ViewController。单击该按钮时,它还会在两个视图控制器之间传递数据。

问题是,当我单击按钮时,以下ViewController加载两次。因此,如果我想回去,我必须通过两个相同的ViewController返回。

我检查了segue,类名和文件名,但没有任何修复它 我还创建了一个新项目并从头开始重写了所有代码,但最终还是没有用。

然而,我注意到当我添加prepare(forSegue :)函数和performSegue函数时问题就出现了。没有它,ViewController只加载一次。但是,当然,如果没有它,我就无法在视图之间传递数据......

以下是我的两个视图的屏幕截图以及两个函数的代码:

First view
Second view

//    Prepare the segue
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "prepareSegue" {
        let timerViewController = segue.destination as! CountdownViewController
        timerViewController.timeInterval1 = waitingTime
        timerViewController.timeInterval2 = shootingTime
        timerViewController.lastSeconds = lastSeconds
        timerViewController.currentTimeInterval = waitingTime
    }
}

//    Prepare the timer when the button is pushed
@IBAction func prepareTimer(_ sender: Any) {
    performSegue(withIdentifier: "prepareSegue", sender: self)
}

2 个答案:

答案 0 :(得分:5)

当两个ViewControllers出现时,可能是因为你有:

  1. 直接从Button
  2. 开始的Storyboard上的segue
  3. IBAction附加到您调用相同Segue的performSegue的按钮
  4. 要解决此问题,您需要创建一个直接从ViewController启动的Segue。在您可以使用IBAction和performSegue

    之后

答案 1 :(得分:0)

您添加了一个seague但也添加了IBAction。如果在InterfaceBuilder中很好地定义了seague,它将执行并调用您的方法。 IBAction是将Action连接到按钮的替代方法。如果你同时使用它们,你有两个动作。