1

我試圖在RightCalloutAccessoryView的DetailDisclosure按鈕被點擊時,將ViewController1(VC1)中所選MKAnnotation的座標,標題和副標題傳遞給ViewController2(VC2)。我有一個從VC1到VC2的標識符viaSegue。我在VC2中有一個帶標識符viaSegueLabel的標籤,我想將座標顯示爲字符串。將選定註釋的座標傳遞給新視圖控制器Swift 2.0

是定製MKAnnotation的召喚出來,以便它顯示在rightCalloutAccessoryView一個DetailDisclosure按鈕看起來功能,如:

// Customize Annotation Callout 
    func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
     // 1 
     let identifier = "Capital" 

     // 2 
     if annotation.isKindOfClass(Capital.self) { 
      // 3 
      var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier) 

      if annotationView == nil { 
       //4 
       annotationView = MKPinAnnotationView(annotation:annotation, reuseIdentifier:identifier) 
       annotationView!.canShowCallout = true 

       // 5 
       let btn = UIButton(type: .DetailDisclosure) 
       annotationView!.rightCalloutAccessoryView = btn 
      } else { 
       // 6 
       annotationView!.annotation = annotation 
      } 

      return annotationView 
     } 

     // 7 
     return nil 
    } 

這需要用戶從VC1到VC2當DetailDisclosure按鈕被點擊貌似功能:

// When righCalloutAccessoryView is tapped, segue to newView 
func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) { 
    self.performSegueWithIdentifier("newView", sender: view) 
} 

而且我覺得我需要實現來完成這個看起來像函數:

// Pass data to newView 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier == "newView") { 
     let destViewController:BusStopSettingsViewController = segue.destinationViewController as! BusStopSettingsViewController 
     destViewController.viaSegue = // not sure how to reference selected Annotation here 
    } 
} 

在prepareForSegue()的最後一行中,我需要引用當前選定的MKAnnotation。是否有內置Swift的方法可以讓我這樣做,還是應該使Annotation成爲全局的?

回答

0

在未來任何人需要實現類似的東西的情況下能夠弄清楚。

self.performSegueWithIdentifier("newView", sender: view) 

編程塞格斯你的程序連接到VC您目前在通過與標識符"newView"一個賽格瑞視圖控制器(VC)。在它完全停止之前,程序調用prepareForSegue()。這個函數是你將處理髮送信息給你繼續使用的VC的地方。我的問題是,我不知道我發送的是什麼(在類型,變量名稱等方面)。如果您注意,prepareForSegue()self.performSegueWithIdentifier("newView", sender: view)都有參數發件人。您使用performSegueWithIdentifier()發送的內容將被傳入prepareForSegue(),並將通過名稱爲viaSegue的變量在您的destinationViewController中收到。這不是一個標準名稱,而是我選擇命名該變量的名稱,如果您研究上面的代碼,則會看到它的使用位置以及它的工作原理。

所以我想發送關於我已經挖掘的MKAnnotation的信息。所以,我需要發送一個MKAnnotationView類型的對象到我的接收VC「BusStopSettingsViewController」(BSSVC)。在BSSVC中,我需要一個名爲「viaSegue」的MKAnnotationView類型的變量。爲了MKAnnotationView我需要做的

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier == "newView") { 
     // pass data to next view 
     let destViewController:BusStopSettingsViewController = segue.destinationViewController as! BusStopSettingsViewController 
     destViewController.viaSegue = sender as! MKAnnotationView 
    } 
} 

通知viaSegue是如何指定爲將要接收這個對象變量發送BSSVC類型的對象。

希望這會有所幫助!