2010-04-04 112 views
0

是否有可能到上彈出返回時回到與註解MKMap觀點仍然是一個新的視圖控制器上顯示與地圖標註的進一步細節的視圖控制器在那個位置。我似乎無法在SDK文檔中找到似乎表明它可能的方法。MKMap註釋顯示視圖控制器,而不是彈出框

回答

2

找到了答案,以我自己的問題,如果你做到以下幾點:

你可以做的是使用一個觀察者,而不是因此在

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 

方法,你可以這樣添加代碼:

當用戶點擊在屏幕上註釋
//Add an observer for the selected-property on the MKAnnotationView. Delegate to self. 
    [annotationView addObserver:self 
      forKeyPath:@"selected" 
       options:NSKeyValueObservingOptionNew 
       context:GMAP_ANNOTATION_SELECTED]; 

    annotationView.annotation = annotation; 
    annotationView.canShowCallout = NO; 

然後創建觀察者捕獲這將調用該方法來呈現任何視圖:

- (void)observeValueForKeyPath:(NSString *)keyPath 
         ofObject:(id)object 
         change:(NSDictionary *)change 
         context:(void *)context{ 

    NSString *action = (NSString*)context; 


    if([action isEqualToString:GMAP_ANNOTATION_SELECTED]){ 
    BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue]; 
    if (annotationAppeared) { 
     [self showAnnotation:((AssetAnnotationView*) object).annotation]; 
    } 
    else { 
     //NSLog(@"annotation deselected %@", ((AssetAnnotationView*) object).annotation.title); 
     //[self hideAnnotation]; 
    } 
    } 
} 

然後讓你的方法,其顯示任何你想要模態的視圖或:

- (void)showAnnotation:(AssetAnnotationView*)annotation { 

    UINavigationController *aNavController = [[UINavigationController alloc] initWithRootViewController:self.assetInfoViewController]; 
    aNavController.navigationBar.barStyle = UIBarStyleBlack; 

    [self presentModalViewController:aNavController animated:YES]; 
    [aNavController release]; 

} 

取消選擇在viewWillAppear中:

的NSArray *選定= [localMapView selectedAnnotations]; (id選中註解){ [localMapView deselectAnnotation:annotation animated:NO]; }

+1

請確保您取消選擇viewDidAppear/viewWillAppear中的annotaiton,否則您將陷入與我相同的問題,無法再次選擇註釋。 – vladzz 2010-06-21 09:34:08

+0

你如何取消選擇註釋?我在這裏嘗試沒有成功。 – goo 2010-08-05 00:01:02

+0

不是這樣做的最有效的方法。但是這種方法似乎工作。 NSArray * selected = [localMapView selectedAnnotations]; for(id 註解選中){localViewView deselectAnnotation:annotation animated:NO]; } – vladzz 2010-08-06 23:19:50

0

您還可以爲您創建的每個註釋使用標籤。適用於我。

相關問題