将一个variables从一个视图控制器传递给另一个视图控制器
我新来的迅速语言,知道这个问题是重复的。我发现了几个类似的问题和答案,但我无法找出问题。
我想将scanStringvariables的值从ScanViewController传递给ResultViewController。
ScanViewcontroller如下:
import UIkit class ScanViewController: UIViewController { var detectionString : String! override func viewDidLoad() { super.viewDidLoad() detectionString = “SomeDetectedString” } override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject!) { if (segue.identifier == "MySegue") { var svc = segue.destinationViewController as ResultViewController; svc.detectedString = detectionString } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
ResultViewController如下所示:
import UIkit class ResultViewController: UIViewController { var detectedString: String! override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor=UIColor.whiteColor() println(detectedString) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
println(detectedString)给我没有结果。 问题是如何从ScanViewController获取variables?
这可能听起来很奇怪,但是你的代码没有问题,但是它不能工作。 我用同样的代码,它忽略了赛格。 然后,我将ScanViewController
embedded到故事板中的导航控制器中。 我还在ScanViewController viewDidLoad
调用了self.performSegueWithIdentifier("MySegue", sender: self)
来启动segue。 那么一切都像一个魅力。 你的prepareForSegue很好。 Yuvrajsinh的build议是好的,但不是必要的(我更改DetailVC到ResultViewController后,我试过了)。 没有导航控制器没有任何工作。 segue.identifier
是一个string,它将工作在一个直的Swiftstring比较。
以下是ScanViewController的代码:
import UIkit class ScanViewController: UIViewController { var detectionString : String! override func viewDidLoad() { super.viewDidLoad() detectionString = "SomeDetectedString" println(detectionString) self.performSegueWithIdentifier("MySegue", sender: self) } override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject!) { if (segue.identifier == "MySegue" || segue.identifier == "SegueFromButton") { println("prepareForSegue") var svc = segue.destinationViewController as ResultViewController; svc.detectedString = detectionString println("svc.detectedString: \(svc.detectedString)") } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
和ResultViewController:
import UIkit class ResultViewController: UIViewController { var detectedString: String! override func viewDidLoad() { println("Result Load View") super.viewDidLoad() self.view.backgroundColor=UIColor.whiteColor() println("detectedString in Result: \(detectedString)") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
你的segue.identifier == "MySegue"
是一些如何不应该比较的方式。
用下面的函数replace你的代码,你就完成了。
override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject!) { let segueName: String = segue.identifier!; if (segueName == "MySegue") { var svc = segue.destinationViewController as DetailVC; svc.detectedString = detectionString } }
有三种select给你:
- 使用
prepareForSegue
方法来获取目标ViewController并设置属性 - build立两个ViewController之间的委托关系进行通信
- 用NSNotificationCenter设置Observer