mkmapview-ピンをタップするときに、deatilviewの最後のアイテム(私のプリスト)を常に表示します

StackOverflow https://stackoverflow.com/questions/3996197

質問

いくつかのピンが付いたMapViewがあります。ピンは、整頓から経度と緯度を積み込んでいます。また、タップされるピンに関する詳細情報を入手する詳細ビューも追加しました。しかし、私の問題は、ピン(disclosebutton ofc)をタップして詳細ビューに押し込まれたとき、それは常に(プリストから)ロードされる最後のアイテムデータであることです。どのピンをタップするかは関係ありません。

例えば:
アイテム1-タイトル:車
アイテム2-タイトル:ボール
アイテム3-タイトル:本
アイテム4-タイトル:自転車

したがって、PIN NR 1をタップすると、詳細のタイトルは自転車です。 PIN NR 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];
}
役に立ちましたか?

解決 2

イェーイ、修正しました!これが私がやったことだった。

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

    MKPinAnnotationView *pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"];
    [pin setAnimatesDrop:YES];
    [pin setCanShowCallout:YES];
    [pin setSelected:YES];
    [pin setUserInteractionEnabled: YES];

    pin.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    return pin;
}

- (void)mapView:(MKMapView *)mv annotationView:(MKAnnotationView *)pin calloutAccessoryControlTapped:(UIControl *)control { 
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

    detailViewController.title = pin.annotation.title;  

    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];
}

他のヒント

したがって、annotationTestは定義されています(rootviewcontroller)(アノテーションではありません)(したがって、上書きすると最後のものです)。 (ID)送信者を使用して、注釈データを取得します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top