2013-02-11 93 views
8

我想在我正在顯示的地圖上單擊DetailDisclosure時切換視圖。我當前的代碼如下:MKAnnotationView在DetailDesclosure按鈕被點擊時推送到視圖控制器

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control 
{ 
    DetailViewController *detailViewController = [[DetailViewController alloc] 
    initWithNibName:@"DetailViewController" bundle:nil]; 
    detailViewController.title = dictionary[@"placeLatitude"] 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
} 

我推到這個視圖控制器,但我還沒有想出如何迫使它從用於生成第一地圖JSON數組拉細節地點。我拉這樣的數據來生成地圖:

for (NSDictionary *dictionary in array) 
{ 
    // retrieve latitude and longitude from the dictionary entry 

    location.latitude = [dictionary[@"placeLatitude"] doubleValue]; 
    location.longitude = [dictionary[@"placeLongitude"] doubleValue]; 

    //CAN I LOAD THE TITLE/ID OF THE LOCATION HERE? 

我知道我有點偏離目標。也許只是在正確的方向踢一腳也許會有所幫助。謝謝!

回答

11

如果您正在使用故事板並從當前場景到目標場景有一個延續,您只需回覆calloutAccessoryControlTapped即可。例如:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    [self performSegueWithIdentifier:@"Details" sender:view]; 
} 

很明顯,你可以檢查註釋與該view相關,等等,如果你有你想要求不同的註釋類型不同塞格斯類型。

而且,當然,如果你想像往常一樣傳遞任何信息到prepareForSegue的下一個場景。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"Details"]) 
    { 
     MKAnnotationView *annotationView = sender; 
     [segue.destinationViewController setAnnotation:annotationView.annotation]; 
    } 
} 

正如你所看到的,我通過annotation對象到我的下一個視圖。如果您的JSON結構中有與每個註釋關聯的其他字段,則一個簡單的解決方案是將屬性添加到與您要跟蹤的每個字段關聯的自定義視圖。只需轉到註釋自定義類的.h並添加所需的屬性即可。然後,當您創建自定義註釋(要添加到地圖)時,也可以設置這些屬性。然後,當您將此註釋傳遞給下一個視圖控制器時,您所需的所有屬性都將在此處可用。


顯然,如果你使用的發鈔銀行,只是做任何你想要實例化一個視圖控制器NIB等價物,設置任何你想要的屬性,要麼推給它或模態呈現它,例如:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    DetailsViewController *controller = [[DetailsViewController alloc] initWithNibName:nil 
                       bundle:nil]; 
    controller.annotation = annotationView.annotation; 
    [self.navigationController pushViewController:controller animated:YES]; // or use presentViewController if you're using modals 
} 
+0

感謝Rob,我是否需要使用故事板才能擁有Segue? – Brandon 2013-02-11 04:56:47

+0

k我看着它。一如既往 - YOU ROCK – Brandon 2013-02-11 04:58:30

+0

那麼,如何訪問新視圖上的字段?我正試圖在我的應用中完成同樣的事情。 – 2014-02-19 22:12:35

相關問題