いくつかのピンが付いたマップビューがあります。ピンは plist から経度と緯度をロードしています。タップされたピンに関する詳細情報を表示する詳細ビューも追加しました。ただし、私の問題は、ピン (discloseButton ofc) をタップして詳細ビューにプッシュされると、常に (plist から) ロードされる最後の項目データになることです。どのピンをタップしても構いません。
例:
アイテム 1 - タイトル: 車
アイテム 2 - タイトル: ボール
アイテム 3 - タイトル: 本
アイテム 4 - タイトル: 自転車
ピン番号 1 をタップすると、詳細ビューのタイトルは自転車です。ピン番号 2 をタップすると、詳細ビューのタイトルが自転車などになります。ポイントを理解していただければ幸いです:)
(いいタイトルが思いつかなくてごめんなさい。)
ありがとう!
役立つ場合は、次のコードを示します:
RootViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"Map";
map.delegate = self;
cam = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:@"Cam"
ofType:@"plist"]];
double minLat = [[cam valueForKeyPath:@"@min.latitude"] doubleValue];
double maxLat = [[cam valueForKeyPath:@"@max.latitude"] doubleValue];
double minLon = [[cam valueForKeyPath:@"@min.longitude"] doubleValue];
double maxLon = [[cam valueForKeyPath:@"@max.longitude"] doubleValue];
MKCoordinateRegion region;
region.center.latitude = (maxLat + minLat) / 2.0;
region.center.longitude = (maxLon + minLon) / 2.0;
region.span.latitudeDelta = (maxLat - minLat) * 1.05;
region.span.longitudeDelta = (maxLon - minLon) * 1.05;
map.region = region;
for (NSDictionary *camDict in cam){
annotationTest = [[MyAnnotation alloc] initWithDictionary:camDict];
[map addAnnotation:annotationTest];
[annotationTest release];
}
}
// AnnotatioView
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
MKPinAnnotationView *annView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"];
[annView setAnimatesDrop:YES];
[annView setCanShowCallout:YES];
[annView setSelected:YES];
[annView setUserInteractionEnabled: YES];
UIButton *discloseButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure];
[discloseButton addTarget: self action: @selector(showMyView:) forControlEvents: UIControlEventTouchUpInside];
annView.rightCalloutAccessoryView = discloseButton;
return annView;
}
//Push the detailView with some data
- (IBAction)showMyView:(id)sender {
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
detailViewController.title = annotationTest.title;
detailViewController.tempAdress = annotationTest.subtitle;
detailViewController.tempUrl = annotationTest.url;
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
}