カスタム注釈ビューを使用すると、 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;
}