2012-09-24 36 views
0

我使用来自plist的数据在地图上加载了一堆针脚。这里是我得到的数据:获取indexPath for mapView注释

for (int i=0; i<self.dataArray.count; i++){ 

    NSDictionary *dataDictionary = [self.dataArray objectAtIndex:i]; 
    NSArray *array = [dataDictionary objectForKey:@"Locations"]; 

    for (int i=0; i<array.count; i++){ 

     NSMutableDictionary *dictionary = [array objectAtIndex:i]; 

     double latitude = [[dictionary objectForKey:@"Latitude"] doubleValue]; 
     double longitude = [[dictionary objectForKey:@"Longitude"] doubleValue]; 

     CLLocationCoordinate2D coord = {.latitude = 
      latitude, .longitude = longitude}; 
     MKCoordinateRegion region = {coord}; 

     MapAnnotation *annotation = [[MapAnnotation alloc] init]; 
     annotation.title = [dictionary objectForKey:@"Name"]; 

     NSString *cityState = [dictionary objectForKey:@"City"]; 
     cityState = [cityState stringByAppendingString:@", "]; 
     NSString *state = [dictionary objectForKey:@"State"]; 
     cityState = [cityState stringByAppendingString:state]; 
     annotation.subtitle = cityState; 
     annotation.coordinate = region.center; 
     [mapView addAnnotation:annotation]; 
    } 
} 

现在对每一个注释,我添加了一个detailDisclosureButton。我想从plist中显示特定位置的详细信息。问题是我需要indexPath.section和indexPath.row。

如何获得pin的indexPath?有没有办法找到填充注释标题的字典的indexPath?

回答

3

我建议不要跟踪“部分”和“行”,而是在注释对象中存储对dictionary本身的引用。

MapAnnotation类,添加属性来保存对源参考字典:

@property (nonatomic, retain) NSMutableDictionary *sourceDictionary; 

在创建注释(在现有的循环),设置该属性与title一起,等:

在细节按钮处理方法
annotation.sourceDictionary = dictionary; 
annotation.title = [dictionary objectForKey:@"Name"]; 

然后(假设你正在使用的calloutAccessoryControlTapped委托方法),你投注释对象类,你就可以访问原来的词典注释来自:

MapAnnotation *mapAnn = (MapAnnotation *)view.annotation; 
NSLog(@"mapAnn.sourceDictionary = %@", mapAnn.sourceDictionary); 
+0

你的天才!像你解释的一样工作。谢谢! – user984248