相同的视图控制器加载两次
Same view controller loads twice
我已经阅读了几篇关于这个问题的帖子,但其中 none 解决了我的问题。
我正在编写一个应用程序,我必须单击一个按钮 ("Prepare") 才能转到以下 ViewController。单击按钮时,它还会在两个视图控制器之间传递数据。
问题是,当我单击按钮时,以下 ViewController 会加载两次。因此,如果我想返回,我必须返回两个相同的 ViewController。
我检查了 segue、class 名称和文件名,但没有任何修复。
我也创建了一个新项目并从头开始重写了所有代码,但最后还是不行。
但是,我注意到当我添加 prepare(forSegue:) 函数和 performSegue 函数时问题出现了。没有它,ViewController 只会加载一次。但是当然,如果没有它,我就无法在视图之间传递数据...
下面是我的两个view的截图和两个函数的代码:
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)
}
您添加了一个 seague 和一个 IBAction。如果 seague 在 InterfaceBuilder 中定义良好,它将执行并调用您的方法。 IBAction 是将 Action 连接到按钮的替代方法。如果两者都使用,则有两个操作。
当出现两个 ViewController 时,可能是因为您有:
- Storyboard 上的 segue,直接从按钮开始
- IBAction 附加到您调用相同 Segue 的 performSegue 的按钮
要解决此问题,您需要创建一个直接从 ViewController 开始的 Segue。在您可以使用 IBAction 和 performSegue
之后
我已经阅读了几篇关于这个问题的帖子,但其中 none 解决了我的问题。
我正在编写一个应用程序,我必须单击一个按钮 ("Prepare") 才能转到以下 ViewController。单击按钮时,它还会在两个视图控制器之间传递数据。
问题是,当我单击按钮时,以下 ViewController 会加载两次。因此,如果我想返回,我必须返回两个相同的 ViewController。
我检查了 segue、class 名称和文件名,但没有任何修复。
我也创建了一个新项目并从头开始重写了所有代码,但最后还是不行。
但是,我注意到当我添加 prepare(forSegue:) 函数和 performSegue 函数时问题出现了。没有它,ViewController 只会加载一次。但是当然,如果没有它,我就无法在视图之间传递数据...
下面是我的两个view的截图和两个函数的代码:
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)
}
您添加了一个 seague 和一个 IBAction。如果 seague 在 InterfaceBuilder 中定义良好,它将执行并调用您的方法。 IBAction 是将 Action 连接到按钮的替代方法。如果两者都使用,则有两个操作。
当出现两个 ViewController 时,可能是因为您有:
- Storyboard 上的 segue,直接从按钮开始
- IBAction 附加到您调用相同 Segue 的 performSegue 的按钮
要解决此问题,您需要创建一个直接从 ViewController 开始的 Segue。在您可以使用 IBAction 和 performSegue
之后