0

MKMapView でどの注釈がタップされているかを知るのに問題があります。

私の問題を説明させてください。マップビューが読み込まれる単純なビューコントローラーがあります。

私の注釈クラス「MapViewAnnotation.h」は次のとおりです

@interface MapViewAnnotation : NSObject <MKAnnotation>
{
    NSString *title;
    CLLocationCoordinate2D coordinate;
    NSString *sID;
    NSString *zipCode;
}
@property (nonatomic, copy) NSString *title;
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, retain) NSString *sID;
@property (nonatomic, retain) NSString *zipCode;

- (id)initWithTitle:(NSString *)titleOfPin andStoreId:(NSString *)storeIdForDetails andCoordinate:(CLLocationCoordinate2D)coordinateOfPin andZipCode:(NSString *)zip;

これが私の「MapViewAnnotation.m」ファイルです。

#import "MapViewAnnotation.h"
#import <MapKit/MapKit.h>

@implementation MapViewAnnotation

@synthesize title, coordinate,storeId,zipCode;

- (id)initWithTitle:(NSString *)titleOfPin andStoreId:(NSString *)storeIdForDetails andCoordinate:(CLLocationCoordinate2D)coordinateOfPin andZipCode:(NSString *)zip
{
    [super init];
    title = titleOfPin;
    coordinate = coordinateOfPin;
    sID = storeIdForDetails;
    zipCode = zip;
    return self;
}


-(void)dealloc
{
    [title release];
    [super dealloc];
}
@end

これは私のviewcontroller.mファイルです

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    //I want to access the sID property of that annotation here. PLEASE HELP ME HOW CAN I DO THAT

    if (!storeDetailControllerObject) {
        storeDetailControllerObject = [[StoreDetailController alloc]init];
    }
    //    storeDetailControllerObject.storeId = [view.annotation storeId];
    [self.navigationController pushViewController:storeDetailControllerObject animated:YES];
4

2 に答える 2

1

MKMapViewDelegate プロトコル リファレンスから:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view;

このメソッドでイベントを処理すると、どの注釈が選択されたかがわかります。
MKMapView のデリゲートを設定し、クラスが MKMapViewDelegate を実装することを宣言する必要があります。

于 2012-12-18T15:41:43.050 に答える
0

これはうまくいくはずです:

MapViewAnnotation *mapViewAnnotation = (MapViewAnnotation*)view.annotation;
if( [mapViewAnnotation isKindOfClass:[MapViewAnnotation class]] ){
    storeDetailControllerObject.storeId = mapViewAnnotation.storeId;
}
于 2012-12-18T15:15:38.577 に答える