0

マップ上にいくつかのピンを配置しました。たとえば、それぞれのブリッジの位置に対応しています。これらのピンのそれぞれは、そのタイトルとサブタイトルを表示するためにクリックされると、それ自身の注釈を有する。これらの注釈内に情報ボタンを追加しました。しかし、UiViewControllerに表示される情報を変更する新しいUiViewControllerを開く方法がわかりません。これは、どのブリッジ情報ボタンが押されたかによって異なります。吹き出しボタンを使用して新しいuiviewcontrollerを開く方法。

基本的に私は方法を知る必要があります。 1:アノテーションの情報ボタンが押されたときにUiViewControllerを開きます。 2:情報ボタンが押されたブリッジのうち、UiViewControllerの支出に関する情報を変更します。あなたが異なるビュー間のナビゲーションhere in this link.

について学ぶことができると私は、ナビゲーション上のいくつかのヒントを与えるだろうとナビゲーション用のデータを準備する

 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

:ここ

は、私がこれまで持っているものです。橋あなただけと呼ばれる1つのコールアウトメソッドを実装する必要があり、このために

をユーザーがクリックすると、以下のようをcalloutAccessoryControlTapped

1.検出。

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があります。

それはちょうどちょうどタイトル字幕を表示するようになりました2つのラベルがあります。

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 
    } 
} 
関連する問題