我正在使用MapKit,当您点击注释气球时,您将被定向到另一个视图。我正在使用的功能是:
func mapView(mapView: MKMapView!, annotationView: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
//get tag here
if(annotationView.tag == 0){
//Do for 0 pin
}
if control == annotationView.rightCalloutAccessoryView {
performSegueWithIdentifier("mapToCity", sender: self)
}
}
但问题是我无法将标记数据传递到下一个视图。我尝试在第一个视图中使用此功能,但我不知道如何在下一个视图中检索数据,或者它是否甚至保存在" CityDetails":
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "mapToCity") {
var yourNextViewController = (segue.destinationViewController as! CityDetails)
}
}
在第二个viewcontroller中:
println(CityDetails);
仅返回我的案例Ontdek_Polen.CityDetails
答案 0 :(得分:1)
没有理由使用代码(segue.destinationViewController as! CityDetails)
。
我建议做的不是使用最后一段代码来访问目标视图控制器项,只需创建类的实例并通过点表示法访问其变量和数据。
离。 (在这个例子中,我说的是目标vc的名称是CityDetails)
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "mapToCity") {
var yourNextViewController: CityDetails = CityDetails()
yourNextViewController.variable = 0 //example
}
}
答案 1 :(得分:1)
如果要使用segue将数据从一个视图传递到另一个视图,请使用以下代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "mapToCity") {
var yourNextViewController = segue.destinationViewController as! CityDetails
yourNextViewController.foo = "This is passed"
}
}
在您的目标视图中,不要忘记创建一个将保存此值的实例,如下所示:
import UIKit
class CityDetails: UIViewController {
var foo = "" //this will hold your value
override func viewDidLoad() {
super.viewDidLoad()
println(foo) //This is passed
}
}
请勿忘记在下一个视图中设置您想要从上一个视图传递的实例类型。
另一种将数据从一个视图传递到另一个视图的方法是使用NSUserDefaults
,如下例所示:
func mapView(mapView: MKMapView!, annotationView: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
//get tag here
if(annotationView.tag == 0){
//Do for 0 pin
}
if control == annotationView.rightCalloutAccessoryView {
//set your object here
NSUserDefaults.standardUserDefaults().setObject("abcd", forKey: "yourKey")
performSegueWithIdentifier("mapToCity", sender: self)
}
}
这会将此值存储到磁盘中,以便您可以使用yourKey
在项目的任何位置读取此值。
这样您就可以从NSUserDefault
:
import UIKit
class CityDetails: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let foo1 = NSUserDefaults.standardUserDefaults().objectForKey("yourKey") as! String
println(foo1) //abcd
}
}
更多Info检查这个示例项目,我用segue传递值。
希望这会有所帮助。