1

カスタム注釈ビューを使用すると、 didSelectAnnotationView が呼び出されるという問題があります。誰かが見て、私が欠けているものを手伝ってくれることを望んでいました.

実際には、ユーザーがボタンに触れたときにメソッドが呼び出されるようにしたいのですが、以下に示すカスタム注釈のスクリーンショットに表示されています。それをcalloutAccessoryViewにしようとしていましたが、何か間違っています。ユーザーがクリックできるカスタム注釈ビューを誰かが作成した場合は、助けていただけるかどうかを確認してください!! これは私を夢中にさせています。関連情報をここに投稿したと思います。質問がない場合は、投稿を編集します。

次のようなカスタム注釈を追加しています。

LocationObject * obj = [m_MyObject.marLocations objectAtIndex:page];
obj.title =@"A";
[mvMapView addAnnotation:obj];

上記で使用されている My Location オブジェクトは、次のように定義されています。

// Location Object
@interface LocationObject : NSObject <MKAnnotation>

@property (nonatomic, retain) NSString * practicename;
@property (nonatomic, retain) NSString * address1;
@property (nonatomic, retain) NSString * mapaddress1;
@property (nonatomic, retain) NSString * address2;
@property (nonatomic, retain) NSString * city;
@property (nonatomic, retain) NSString * state;
@property (nonatomic, retain) NSString * zip;
@property (nonatomic, retain) NSString * phone;
@property (nonatomic, retain) NSString * fax;
@property (nonatomic, retain) NSString * email;
@property (nonatomic, retain) NSString * longitude;
@property (nonatomic, retain) NSString * latitude;
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;

@end // End Location Object

私のviewForAnnotationはこれを行います:

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]])
    {
        [map.userLocation setTitle:@"I am here"];
        return nil;
    }

    static NSString* AnnotationIdentifier = @"annotationViewID";
    ViewDirectionsAnnotationView * annotationView = [[ViewDirectionsAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier];
    int page = floor((svOfficesScrollView.contentOffset.x - svOfficesScrollView.frame.size.width / 2) / svOfficesScrollView.frame.size.width) + 1;
    LocationObject * obj = [m_DentistObject.marLocations objectAtIndex:page];
    double dLatitude = [obj.latitude doubleValue];
    double dLongitude = [obj.longitude doubleValue];
    CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(dLatitude, dLongitude);
    ((LocationObject*)annotation).coordinate = coordinate;
    annotationView.lbPracticeName.text = obj.practicename;
    annotationView.lbStreet.text = obj.address1;
    NSString * sCityStateZip = [NSString stringWithFormat:@"%@, %@ %@", obj.city, obj.state, obj.zip];
    annotationView.lbCityStateZip.text = sCityStateZip;
    annotationView.lbPhoneNumber.text = obj.phone;
    annotationView.canShowCallout = YES;
    annotationView.annotation = annotation;
    annotationView.rightCalloutAccessoryView = (UIButton *)[annotationView viewWithTag:1]; //[UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    return annotationView;
}

そして、私の注釈ビューは次のようになります:

@interface ViewDirectionsAnnotationView : MKAnnotationView
{
    CLLocationCoordinate2D    coordinate;
    NSString        * title;
    NSString        * subtitle;
}

@property (nonatomic, retain) IBOutlet UIView * loadedView;
@property (weak, nonatomic) IBOutlet UILabel  * lbPracticeName;
@property (weak, nonatomic) IBOutlet UILabel  * lbStreet;
@property (weak, nonatomic) IBOutlet UILabel  * lbCityStateZip;
@property (weak, nonatomic) IBOutlet UILabel  * lbPhoneNumber;

@end

上記のビューの xib は次のようになります。

ここに画像の説明を入力

しかし、私の didSelectAnnotationView は呼び出されません。私が欠けているものを誰かが説明できますか?

どうか、これが私を狂わせてきたので、助けていただければ幸いです。完全に間違っている可能性がありますが、カスタム ビューが表示されるので、近いと思います。

助けてくれてありがとう!!

アップデート:

デリゲートについて言及するのを忘れていました。私はデリゲートを何度もチェックしましたが、正しいと信じています。mapView がある ViewController .h ファイルには、[mapView setDelegate:self] があり、同じ .m ファイルに、viewForAnnotation メソッドと didSelectAnnotationView を実装した場所があります。viewForAnnotation が呼び出されますが、他は呼び出されません。

もう 1 つの興味深い情報は、カスタム アノテーションのすぐ下をクリック (タッチ) すると、didSelectAnnotationView が呼び出されることです。私は今、私はもっと混乱していると思います!!

更新#2:

私のxibはこのようにロードされます:

私の viewForAnnotation では、initWithAnnotation を呼び出します。その方法は次のとおりです。

- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString*)reuseIdentifier
{
    self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
    if (self != nil)
    {
        [[NSBundle mainBundle] loadNibNamed:@"DirectionsAnnotation" owner:self options:nil];
        if (loadedView)
        {
            [loadedView setFrame:CGRectMake(-(loadedView.frame.size.width/2), -(loadedView.frame.size.height), loadedView.frame.size.width, loadedView.frame.size.height)];
            [self addSubview:loadedView];
        }
    }
    return self;
}
4

1 に答える 1

0

MapView を表示しているビューは、デリゲートとして設定する必要があります。

didSelectAnnotationView はどこにありますか? デリゲート プロトコルが実装されていることを確認してください。例えば

@interface MyView : UIViewController <MKMapViewDelegate>
...
@end

そしたらまたどこかで…

[mapView setDelegate:myView];
于 2013-01-15T22:30:22.807 に答える