0

我在地图上放了几个别针,例如对应不同的桥位置。当点击这些引脚时,每个引脚都有自己的注释,显示其标题和副标题。我在这些注释中添加了一个信息按钮。然而,我不知道如何打开一个新的UiViewController,它将改变显示在UiViewController上的信息,这取决于按下哪个桥信息按钮。如何使用标注按钮打开新的uiviewcontroller。 (斯威夫特)

所以基本上我需要知道如何: 1:按下注释中的信息按钮时打开UiViewController。 2:改变UiViewController上关于哪些桥接信息按钮被按下的信息。

这是我到目前为止有:

 mapView.delegate = self 



    //bridges 
    var Bridge1 = CLLocationCoordinate2DMake(48.60,2.90) 
    var bridge2 = CLLocationCoordinate2DMake(48.61, 2.91) 
    var bridge3 = CLLocationCoordinate2DMake(48.62, 2.92) 
    var bridge4 = CLLocationCoordinate2DMake(48.63, 2.93) 
    var bridge5 = CLLocationCoordinate2DMake(48.64, 2.94) 
    var bridge6 = CLLocationCoordinate2DMake(48.65, 2.95) 


    var span = MKCoordinateSpanMake(0.4, 0.4) 
    var region = MKCoordinateRegion(center: Bridge1, span: span) 
    mapView.setRegion(region, animated: true) 

    var Bridge1pin = MKPointAnnotation() 
    Bridge1pin.coordinate = Bridge1 
    Bridge1pin.title = "Bridge1" 
    Bridge1pin.subtitle = "This is bridge 1" 
    mapView.addAnnotation(Bridge1pin) 

    var bridge2pin = MKPointAnnotation() 
    bridge2pin.coordinate = bridge2 
    bridge2pin.title = "Bridge2" 
    bridge2pin.subtitle = "This is bridge 2" 
    mapView.addAnnotation(bridge2pin) 

    var bridge3pin = MKPointAnnotation() 
    bridge3pin.coordinate = bridge3 
    bridge3pin.title = "Bridge3" 
    bridge3pin.subtitle = "This is bridge 3" 
    mapView.addAnnotation(bridge3pin) 

    var bridge4pin = MKPointAnnotation() 
    bridge4pin.coordinate = bridge4 
    bridge4pin.title = "Bridge4" 
    bridge4pin.subtitle = "This is bridge 4" 
    mapView.addAnnotation(bridge4pin) 

    var bridge5pin = MKPointAnnotation() 
    bridge5pin.coordinate = bridge5 
    bridge5pin.title = "bridge5" 
    bridge5pin.subtitle = "hello this is bridge 5" 
    mapView.addAnnotation(bridge5pin) 

    var bridge6pin = MKPointAnnotation() 
    bridge6pin.coordinate = bridge6 
    bridge6pin.title = "bridge6" 
    bridge6pin.subtitle = "hello this is bridge 6" 
    mapView.addAnnotation(bridge6pin) 




} 


func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
    let reuseIdentifier = "pin" 
    var pin = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseIdentifier) as? MKPinAnnotationView 
    if pin == nil { 
     pin = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier) 
     pin!.pinColor = .Red 
     pin!.canShowCallout = true 
     pin!.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure) 
    } else { 
     pin!.annotation = annotation 
    } 
    return pin 
} 


} 

回答

1

您可以了解here in this link.

的不同意见之间的导航和我会给导航的一些提示和准备数据的导​​航。

1.当检测到桥上

为此,您只需要实现一个叫标注方法,用户点击如下calloutAccessoryControlTapped

func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) { 
    performSegueWithIdentifier("info", sender: view) 
    // Above line of code is used for the segue operation between multiple MVCs. 
} 

2.您需要添加赛格瑞操作

这可以通过调速拖动来实现从主视图到故事板的详细视图,并选择为在弹出,并在显示属性检查器中添加的标识符信息

3.准备模型抽头桥

对于此仅覆盖prepareForSegue方法如下。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    //Just validating by checking the same identifier 
    if (segue.identifier == "info") { 
     if let annotation = sender as? MKAnnotationView { 
      let detailViewController = segue.destinationViewController as! DetailViewController 
      detailViewController.titleText = annotation.annotation?.title ?? "" 
      detailViewController.detaileText = annotation.annotation?.subtitle ?? "" 
     } 
    } 
} 

4.这里是DetailViewController。

它只是有两个标签,现在只是显示冠军字幕

import UIKit 
class DetailViewController: UIViewController { 
    @IBOutlet weak var titleLabel: UILabel! 
    @IBOutlet weak var detailLabel: UILabel! 

    var titleText: String? { didSet { updateUI() } } 
    var detaileText: String? { didSet { updateUI() } } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     updateUI() 
    } 

    private func updateUI() { 
     self.titleLabel?.text = self.titleText 
     self.detailLabel?.text = self.detaileText 
    } 
}