0

지도에 여러 개의 핀을 넣었습니다 (예 : 다리 위치가 다름). 이 핀들 각각은 클릭시 제목과 부제목을 표시하는 고유 한 주석을 가지고 있습니다. 이 주석 내에 정보 버튼을 추가했습니다. 그러나 어떤 UiViewController 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

: 여기

는 내가 지금까지 가지고있는 것입니다. 다리 방금 라는 하나 개의 콜 아웃 메소드를 구현하기 위해 필요한이 들어

에 사용자가 클릭 아래을 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. 당신은 SEGUE 작업을 추가 할 필요가

이 스토리 보드의 세부보기로 기본보기에서 컨트롤 드래그하여 수행하고 팝업에와에을 보여로 선택 될 수있다 속성 관리자는 도청 다리

준비 정보

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 
    } 
}